diff --git a/bin/v-add-cron-job b/bin/v-add-cron-job index b6b2dd575..75a396a09 100755 --- a/bin/v-add-cron-job +++ b/bin/v-add-cron-job @@ -55,7 +55,7 @@ str="$str CMD='$command' SUSPENDED='no' TIME='$TIME' DATE='$DATE'" # Adding to crontab echo "$str" >> $VESTA/data/users/$user/cron.conf -# Chaning permissions +# Changing permissions chmod 660 $VESTA/data/users/$user/cron.conf # Sort jobs by id number diff --git a/bin/v-add-domain b/bin/v-add-domain index 32e56214c..66fd2664c 100755 --- a/bin/v-add-domain +++ b/bin/v-add-domain @@ -9,7 +9,7 @@ # Variable&Function # #----------------------------------------------------------# -# Argument defenition +# Argument definition user=$1 domain=$2 ip=$3 @@ -48,29 +48,31 @@ if [ -z "$ip" ]; then fi # Web domain +# Do Not restart at this point, will loose connection from API calls if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then - $BIN/v-add-web-domain $user $domain $ip - retun_code=$? + $BIN/v-add-web-domain $user $domain $ip no + return_code=$? fi # Proxy support -if [ ! -z "$PROXY_SYSTEM" ] && [ "$retun_code" -eq 0 ]; then - $BIN/v-add-web-domain-proxy $user $domain +# Do Not restart at this point, will loose connection from API calls +if [ ! -z "$PROXY_SYSTEM" ] && [ "$return_code" -eq 0 ]; then + $BIN/v-add-web-domain-proxy $user $domain '' '' no fi # DNS domain if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'no' ]; then - if [ "$retun_code" -eq 0 ]; then + if [ "$return_code" -eq 0 ]; then $BIN/v-add-dns-domain $user $domain $ip - retun_code=$? + return_code=$? fi fi # Mail domain if [ ! -z "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then - if [ "$retun_code" -eq 0 ]; then + if [ "$return_code" -eq 0 ]; then $BIN/v-add-mail-domain $user $domain - retun_code=$? + return_code=$? fi fi @@ -79,4 +81,4 @@ fi # Vesta # #----------------------------------------------------------# -exit $retun_code +exit $return_code diff --git a/bin/v-add-remote-dns-host b/bin/v-add-remote-dns-host index a9bdd25c4..835f97f36 100755 --- a/bin/v-add-remote-dns-host +++ b/bin/v-add-remote-dns-host @@ -16,6 +16,7 @@ user=$3 password=$4 type=${5-api} dns_user=${6-dns-cluster} +DNS_USER=$dns_user # Includes source $VESTA/func/main.sh @@ -42,9 +43,10 @@ is_dnshost_alive # Action # #----------------------------------------------------------# -# Concatentating db host string -str="HOST='$host' USER='$user' PASSWORD='$password' DNS_USER='$dns_user'" -str="$str TYPE='$type' SUSPENDED='no' TIME='$TIME' DATE='$DATE'" +# Concatentating dns host string +str="HOST='$host' PORT='$port' USER='$user' PASSWORD='$password'" +str="$str DNS_USER='$dns_user' TYPE='$type' SUSPENDED='no'" +str="$str TIME='$TIME' DATE='$DATE'" # Adding host to dns-cluster.conf echo "$str" >> $VESTA/conf/dns-cluster.conf diff --git a/bin/v-add-user b/bin/v-add-user index 732fde24e..99de6ea7d 100755 --- a/bin/v-add-user +++ b/bin/v-add-user @@ -28,7 +28,7 @@ EVENT="$DATE $TIME $SCRIPT $A1 $A2 $A3 $A4 $A5 $A6 $A7 $A8 $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" + echo "Error: user $user exists" log_event "$E_EXISTS" "$EVENT" exit $E_EXISTS fi @@ -207,7 +207,6 @@ chmod 660 $USER_DATA/user.conf # Updating quota if [ "$DISK_QUOTA" = 'yes' ]; then - echo "Setting quota" $BIN/v-update-user-quota "$user" fi diff --git a/bin/v-add-web-domain-ftp b/bin/v-add-web-domain-ftp index d6c3fb45f..be10e90b8 100755 --- a/bin/v-add-web-domain-ftp +++ b/bin/v-add-web-domain-ftp @@ -1,8 +1,8 @@ #!/bin/bash # info: add ftp account for web domain. -# options: USER DOMAIN FTP_USER FTP_PASSWORD +# options: USER DOMAIN FTP_USER FTP_PASSWORD [FTP_PATH] # -# The function creates addutional ftp account for web domain. +# The function creates additional ftp account for web domain. #----------------------------------------------------------# @@ -15,6 +15,7 @@ domain=$(idn -t --quiet -u "$2" ) domain_idn=$(idn -t --quiet -a "$domain") ftp_user=${1}_${3} ftp_password=$4 +ftp_path=$5 # Includes source $VESTA/func/main.sh @@ -30,57 +31,93 @@ EVENT="$DATE $TIME $SCRIPT $A1 $A2 $A3 $A4 $A5 $A6 $A7 $A8 $A9" # Verifications # #----------------------------------------------------------# -check_args '4' "$#" 'USER DOMAIN FTP_USER FTP_PASSWORD' +check_args '4' "$#" 'USER DOMAIN FTP_USER FTP_PASSWORD [FTP_PATH]' validate_format 'user' 'domain' 'ftp_user' 'ftp_password' is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM' is_object_valid 'user' 'USER' "$user" is_object_unsuspended 'user' 'USER' "$user" is_object_valid 'web' 'DOMAIN' "$domain" is_object_unsuspended 'web' 'DOMAIN' "$domain" +check_ftp_user=$(grep "^$ftp_user:" /etc/passwd) +if [ ! -z "$check_ftp_user" ] && [ "$FTP_USER" != "$ftp_user" ]; then + echo "Error: ftp user $ftp_user already exists" + log_event "$E_EXISTS" "$EVENT" + exit $E_EXISTS +fi #----------------------------------------------------------# # Action # #----------------------------------------------------------# +# Get domain values get_domain_values 'web' -check_ftp_user=$(grep "^$ftp_user:" /etc/passwd) -if [ ! -z "$check_ftp_user" ] && [ "$FTP_USER" != "$ftp_user" ]; then - echo "Error: ftp user $ftp_user already exists" - log_event "$E_EXISTS $EVENT" - exit $E_EXISTS + +# Defining ftp user shell +if [ -z "$FTP_SHELL" ]; then + shell='/sbin/nologin' + if [ -e "/usr/bin/rssh" ]; then + shell='/usr/bin/rssh' + fi +else + shell=$FTP_SHELL fi -if [ ! -z "$FTP_USER" ]; then - /usr/sbin/userdel -f $FTP_USER > /dev/null 2>&1 +# Defining path +if [ -z "$ftp_path" ]; then + ftp_path_a="$HOMEDIR/$user/web/$domain" +else + # Validating absolute path + ftp_path_a=$(readlink -f "$HOMEDIR/$user/web/$domain/$ftp_path") + if [ -z "$(echo $ftp_path_a |grep $HOMEDIR/$user/web/$domain)" ]; then + echo "Error: absolute path $ftp_path_a is invalid" + log_event "$E_INVALID" "$EVENT" + exit $E_INVALID + fi + # Creating ftp user home directory + if [ ! -e "$ftp_path_a" ]; then + mkdir -p $ftp_path_a + chown $user:$user "$ftp_path_a" + chmod 751 "$ftp_path_a" + fi fi -# Define shell -shell='/sbin/nologin' -if [ -e "/usr/bin/rssh" ]; then - shell='/usr/bin/rssh' -fi - -# Adding user +# Adding ftp user /usr/sbin/useradd $ftp_user \ -s $shell \ -o -u $(id -u $user) \ -g $(id -u $user) \ - -M -d "$HOMEDIR/$user/web/$domain" > /dev/null 2>&1 + -M -d "$ftp_path_a" > /dev/null 2>&1 + +# Set ftp user password echo "$ftp_user:$ftp_password" | /usr/sbin/chpasswd -ftp_md5="$(awk -v user=$ftp_user -F : 'user == $1 {print $2}' /etc/shadow)" +ftp_md5=$(awk -v user=$ftp_user -F : 'user == $1 {print $2}' /etc/shadow) #----------------------------------------------------------# # Vesta # #----------------------------------------------------------# -# Update config +# Transforming absolute path to relative +ftp_path_r=$(echo $ftp_path_a |sed "s%$HOMEDIR/$user/web/$domain%%") + +# Concatenating ftp variables +if [ ! -z "$FTP_USER" ]; then + ftp_user="$FTP_USER:$ftp_user" + ftp_md5="$FTP_MD5:$ftp_md5" + ftp_path="$FTP_PATH:$ftp_path_r" +fi + +# Adding new key into web.conf +add_object_key "web" 'DOMAIN' "$domain" 'FTP_PATH' 'PROXY' + +# Updating config update_object_value 'web' 'DOMAIN' "$domain" '$FTP_USER' "$ftp_user" update_object_value 'web' 'DOMAIN' "$domain" '$FTP_MD5' "$ftp_md5" +update_object_value 'web' 'DOMAIN' "$domain" '$FTP_PATH' "$ftp_path" # Logging -log_history "added ftp account $ftp_user for $domain" +log_history "added ftp account ${1}_${3}@$domain" log_event "$OK" "$EVENT" exit diff --git a/bin/v-add-web-domain-stats b/bin/v-add-web-domain-stats index 5d6056d18..8ee057618 100755 --- a/bin/v-add-web-domain-stats +++ b/bin/v-add-web-domain-stats @@ -52,20 +52,20 @@ upd_web_domain_values # Adding statistic config cat $WEBTPL/$type/$type.tpl |\ - sed -e "s/%ip%/$ip/g" \ - -e "s/%web_port%/$WEB_PORT/g" \ - -e "s/%web_system%/$WEB_SYSTEM/g" \ - -e "s/%web_ssl_port%/$WEB_SSL_PORT/g" \ - -e "s/%rgroups%/$WEB_RGROUPS/g" \ - -e "s/%proxy_system%/$PROXY_SYSTEM/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" \ + sed -e "s|%ip%|$ip|g" \ + -e "s|%web_port%|$WEB_PORT|g" \ + -e "s|%web_system%|$WEB_SYSTEM|g" \ + -e "s|%web_ssl_port%|$WEB_SSL_PORT|g" \ + -e "s|%rgroups%|$WEB_RGROUPs|g" \ + -e "s|%proxy_system%|$PROXY_SYSTEM|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/$type.$domain.conf if [ "$type" == 'awstats' ]; then diff --git a/bin/v-change-user-language b/bin/v-change-user-language index 3bc437a84..22011151b 100755 --- a/bin/v-change-user-language +++ b/bin/v-change-user-language @@ -49,14 +49,6 @@ else update_user_value "$user" '$LANGUAGE' "$language" fi -exit -# Changing user contact email -old_email=$(get_user_value '$CONTACT') -update_user_value "$user" '$CONTACT' "$email" -pw_str=$(grep -n "^$user:" /etc/passwd) -str=$(echo "$pw_str" | cut -f 1 -d :) -sed -i "$str s/$old_email/$email/g" /etc/passwd - #----------------------------------------------------------# # Vesta # diff --git a/bin/v-change-web-domain-ftp b/bin/v-change-web-domain-ftp-password similarity index 66% rename from bin/v-change-web-domain-ftp rename to bin/v-change-web-domain-ftp-password index a69cf510e..c4cd90f98 100755 --- a/bin/v-change-web-domain-ftp +++ b/bin/v-change-web-domain-ftp-password @@ -1,8 +1,8 @@ #!/bin/bash -# info: add ftp account for web domain. +# info: change ftp user password. # options: USER DOMAIN FTP_USER FTP_PASSWORD # -# The function creates addutional ftp account for web domain. +# The function changes ftp user password. #----------------------------------------------------------# @@ -13,7 +13,7 @@ user=$1 domain=$(idn -t --quiet -u "$2" ) domain_idn=$(idn -t --quiet -a "$domain") -ftp_user=${1}_${3} +ftp_user=$3 ftp_password=$4 # Includes @@ -33,31 +33,39 @@ is_object_valid 'user' 'USER' "$user" is_object_unsuspended 'user' 'USER' "$user" is_object_valid 'web' 'DOMAIN' "$domain" is_object_unsuspended 'web' 'DOMAIN' "$domain" -is_object_value_empty 'web' 'DOMAIN' "$domain" '$FTP_USER' +get_domain_values 'web' +if [ -z "$(echo $FTP_USER | tr ':' '\n' | grep ^$ftp_user$)" ]; then + echo "Error: account $ftp_user doesn't exist" + log_event "$E_NOTEXIST" "$EVENT" + exit $E_NOTEXIST +fi #----------------------------------------------------------# # Action # #----------------------------------------------------------# -# Adding user -/usr/sbin/adduser $ftp_user -g $user -s /sbin/nologin -M \ - -d "$HOMEDIR/$user/web/$domain" > /dev/null 2>&1 +# Changing ftp user password echo "$ftp_user:$ftp_password" | /usr/sbin/chpasswd - -ftp_md5="$(awk -v user=$ftp_user -F : 'user == $1 {print $2}' /etc/shadow)" +ftp_md5=$(awk -v user=$ftp_user -F : 'user == $1 {print $2}' /etc/shadow) #----------------------------------------------------------# # Vesta # #----------------------------------------------------------# -# Update config -update_object_value 'web' 'DOMAIN' "$domain" '$FTP_USER' "$ftp_user" +# Rebuilding FTP variables +position=$(echo $FTP_USER |tr ':' '\n' |grep -n '' |grep ":$ftp_user$" |\ + cut -f 1 -d:) +ftp_md5=$(echo $FTP_MD5 |tr ':' '\n' |grep -n '' |\ + sed -e "s%^$position:.*%$position:$ftp_md5%" |\ + cut -f 2 -d :| sed -e "/^$/d"| sed -e ':a;N;$!ba;s/\n/:/g') + +# Updating config update_object_value 'web' 'DOMAIN' "$domain" '$FTP_MD5' "$ftp_md5" # Logging -log_history "added ftp account $ftp_user for $domain" +log_history "changed password for $ftp_user on $domain" log_event "$OK" "$EVENT" exit diff --git a/bin/v-change-web-domain-ftp-path b/bin/v-change-web-domain-ftp-path new file mode 100755 index 000000000..f4489c0a1 --- /dev/null +++ b/bin/v-change-web-domain-ftp-path @@ -0,0 +1,89 @@ +#!/bin/bash +# info: change path for ftp user. +# options: USER DOMAIN FTP_USER FTP_PATH +# +# The function changes ftp user path. + + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +# Argument defenition +user=$1 +domain=$(idn -t --quiet -u "$2" ) +domain_idn=$(idn -t --quiet -a "$domain") +ftp_user=$3 +ftp_path=$4 + +# Includes +source $VESTA/func/main.sh +source $VESTA/func/domain.sh +source $VESTA/conf/vesta.conf + + +#----------------------------------------------------------# +# Verifications # +#----------------------------------------------------------# + +check_args '4' "$#" 'USER DOMAIN FTP_USER FTP_PATH' +validate_format 'user' 'domain' 'ftp_user' +is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM' +is_object_valid 'user' 'USER' "$user" +is_object_unsuspended 'user' 'USER' "$user" +is_object_valid 'web' 'DOMAIN' "$domain" +is_object_unsuspended 'web' 'DOMAIN' "$domain" +get_domain_values 'web' +if [ -z "$(echo $FTP_USER | tr ':' '\n' | grep ^$ftp_user$)" ]; then + echo "Error: account $ftp_user doesn't exist" + log_event "$E_NOTEXIST" "$EVENT" + exit $E_NOTEXIST +fi +ftp_path_a=$(readlink -f "$HOMEDIR/$user/web/$domain/$ftp_path") +if [ -z "$(echo $ftp_path_a |grep $HOMEDIR/$user/web/$domain)" ]; then + echo "Error: absolute path $ftp_path_a is invalid" + log_event "$E_INVALID" "$EVENT" + exit $E_INVALID +fi + + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +# MKDIR if path doesn't exist +if [ ! -e "$ftp_path_a" ]; then + mkdir -p "$ftp_path_a" + chown $user:$user "$ftp_path_a" + chmod 751 "$ftp_path_a" +fi + +# Chaning ftp user path +pw_str=$(grep -n "^$ftp_user:" /etc/passwd) +str=$(echo "$pw_str" | cut -f 1 -d :) +old_path=$(echo "$pw_str" | cut -f 7 -d :) +sed -i "$str s%$old_path%$ftp_path_a%g" /etc/passwd + + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +# Transforming absolute path to relative +ftp_path_r=$(echo $ftp_path_a |sed "s%$HOMEDIR/$user/web/$domain%%") + +# Rebuilding FTP variables +position=$(echo $FTP_USER |tr ':' '\n' |grep -n '' |grep ":$ftp_user$" |\ + cut -f 1 -d:) +ftp_path=$(echo $FTP_PATH |tr ':' '\n' |grep -n '' |\ + sed -e "s%^$position:.*%$position:$ftp_path_r%" |\ + cut -f 2 -d :| sed -e ':a;N;$!ba;s/\n/:/g') + +# Updating config +update_object_value 'web' 'DOMAIN' "$domain" '$FTP_PATH' "$ftp_path" + +# Logging +log_history "changed path to $ftp_path_a for $ftp_user@$domain" +log_event "$OK" "$EVENT" + +exit diff --git a/bin/v-copy-fs-file b/bin/v-copy-fs-file new file mode 100755 index 000000000..a3004654b --- /dev/null +++ b/bin/v-copy-fs-file @@ -0,0 +1,58 @@ +#!/bin/bash +# File copier + +user=$1 +file_src=$2 +file_dst=$3 + +# Checking arguments +if [ -z "$file_dst" ]; then + echo "Usage: USER SRC_FILE DST_FILE" + exit 1 +fi + +# Checking users +if [ ! -e "$VESTA/data/users/$user" ]; then + exit 1 +fi + +# Checking homedir +homedir=$(grep "^$user:" /etc/passwd | cut -f 6 -d :) +if [ -z $homedir ]; then + exit 1 +fi + +# Checking source file +if [ ! -e "$file_src" ]; then + exit 1 +fi + +# Checking source path +rpath=$(readlink -f "$file_src") +if [ -z "$(echo $rpath |grep ^/tmp)" ]; then + exit 1 +fi + +# Checking destination path +rpath=$(readlink -f "$file_dst") +if [ -z "$(echo $rpath |grep ^$homedir)" ]; then + exit 1 +fi + +# Checking dst file permission +if [ -e "$file_dst" ]; then + perms=$(stat --format '%a' $file_dst) +fi + +# Copying file +cp $file_src $file_dst + +# Changing ownership +chown $user:$user $file_dst + +# Changin permissions +if [ ! -z "$perms" ]; then + chmod $perms $file_dst +fi + +exit diff --git a/bin/v-delete-user b/bin/v-delete-user index d05cc7d9d..07efd7496 100755 --- a/bin/v-delete-user +++ b/bin/v-delete-user @@ -89,8 +89,14 @@ fi sed -i "/ $user$/d" $VESTA/data/queue/disk.pipe sed -i "/ $user$/d" $VESTA/data/queue/traffic.pipe -# Removing system user -/usr/sbin/userdel -f $user +# Deleting system user +/usr/sbin/userdel -f $user >> /dev/null 2>&1 +if [ "$?" != 0 ]; then + sed -i "/^$user:/d" /etc/passwd + sed -i "/^$user:/d" /etc/shadow +fi + +# Deleting user directories chattr -i $HOMEDIR/$user/conf rm -rf $HOMEDIR/$user rm -f /var/spool/mail/$user diff --git a/bin/v-delete-web-domain b/bin/v-delete-web-domain index 68c86d2fc..3ee9121d2 100755 --- a/bin/v-delete-web-domain +++ b/bin/v-delete-web-domain @@ -89,9 +89,15 @@ if [ ! -z "$STATS" ] && [ "$STATS" != 'no' ]; then rm -f /etc/awstats/$STATS.$domain.conf fi -# Deleting ftp account +# Deleting ftp users if [ ! -z "$FTP_USER" ]; then - /usr/sbin/userdel -f $FTP_USER >> /dev/null 2>&1 + for ftp_user in ${FTP_USER//:/ }; do + /usr/sbin/userdel $ftp_user >> /dev/null 2>&1 + if [ "$?" != 0 ]; then + sed -i "/^$ftp_user:/d" /etc/passwd + sed -i "/^$ftp_user:/d" /etc/shadow + fi + done fi # Deleting directory diff --git a/bin/v-delete-web-domain-ftp b/bin/v-delete-web-domain-ftp index 2b776e304..01b8ac479 100755 --- a/bin/v-delete-web-domain-ftp +++ b/bin/v-delete-web-domain-ftp @@ -1,6 +1,6 @@ #!/bin/bash -# info: delete webdomain ftp account. -# options: USER DOMAIN +# info: delete webdomain ftp account +# options: USER DOMAIN FTP_USER # # The function deletes additional ftp account. @@ -13,6 +13,7 @@ user=$1 domain=$(idn -t --quiet -u "$2" ) domain_idn=$(idn -t --quiet -a "$domain") +ftp_user=$3 # Includes source $VESTA/func/main.sh @@ -24,14 +25,19 @@ source $VESTA/conf/vesta.conf # Verifications # #----------------------------------------------------------# -check_args '2' "$#" 'USER DOMAIN' -validate_format 'user' 'domain' +check_args '3' "$#" 'USER DOMAIN FTP_USER' +validate_format 'user' 'domain' 'ftp_user' is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM' is_object_valid 'user' 'USER' "$user" is_object_unsuspended 'user' 'USER' "$user" is_object_valid 'web' 'DOMAIN' "$domain" is_object_unsuspended 'web' 'DOMAIN' "$domain" -is_object_value_exist 'web' 'DOMAIN' "$domain" '$FTP_USER' +get_domain_values 'web' +if [ -z "$(echo $FTP_USER | tr ':' '\n' | grep ^$ftp_user$)" ]; then + echo "Error: account $ftp_user doesn't exist" + log_event "$E_NOTEXIST" "$EVENT" + exit $E_NOTEXIST +fi #----------------------------------------------------------# @@ -39,20 +45,34 @@ is_object_value_exist 'web' 'DOMAIN' "$domain" '$FTP_USER' #----------------------------------------------------------# # Deleting ftp user -get_domain_values 'web' -/usr/sbin/userdel -f $FTP_USER >> /dev/null 2>&1 +/usr/sbin/userdel $ftp_user >> /dev/null 2>&1 +if [ "$?" != 0 ]; then + sed -i "/^$ftp_user:/d" /etc/passwd + sed -i "/^$ftp_user:/d" /etc/shadow +fi #----------------------------------------------------------# # Vesta # #----------------------------------------------------------# +# Rebuilding FTP variables +position=$(echo $FTP_USER |tr ':' '\n' |grep -n '' |grep ":$ftp_user$" |\ + cut -f 1 -d:) +ftp_user=$(echo $FTP_USER |tr ':' '\n' |grep -n '' |grep -v "^$position:" |\ + cut -f 2 -d :| sed -e "/^$/d"| sed -e ':a;N;$!ba;s/\n/:/g') +ftp_md5=$(echo $FTP_MD5 |tr ':' '\n' |grep -n '' |grep -v "^$position:" |\ + cut -f 2 -d :| sed -e ':a;N;$!ba;s/\n/:/g') +ftp_path=$(echo $FTP_PATH |tr ':' '\n' |grep -n '' |grep -v "^$position:" |\ + cut -f 2 -d :| sed -e ':a;N;$!ba;s/\n/:/g') + # Update config -update_object_value 'web' 'DOMAIN' "$domain" '$FTP_USER' '' -update_object_value 'web' 'DOMAIN' "$domain" '$FTP_MD5' '' +update_object_value 'web' 'DOMAIN' "$domain" '$FTP_USER' "$ftp_user" +update_object_value 'web' 'DOMAIN' "$domain" '$FTP_MD5' "$ftp_md5" +update_object_value 'web' 'DOMAIN' "$domain" '$FTP_PATH' "$ftp_path" # Logging -log_history "deleted ftp account $FTP_USER for $domain" +log_history "deleted ftp account ${3} for $domain" log_event "$OK" "$EVENT" exit diff --git a/bin/v-list-fs-directory b/bin/v-list-fs-directory new file mode 100755 index 000000000..a06b4168d --- /dev/null +++ b/bin/v-list-fs-directory @@ -0,0 +1,39 @@ +#!/bin/bash +# File list wrapper + +user=$1 +path=$2 + +# Checking arguments +if [ -z "$user" ]; then + echo "Usage: USER [PATH]" + exit 1 +fi + +# Checking users +if [ ! -e "$VESTA/data/users/$user" ]; then + exit 1 +fi + +# Checking homedir +homedir=$(grep "^$user:" /etc/passwd | cut -f 6 -d :) +if [ -z $homedir ]; then + exit 1 +fi + +# Checking path +if [ ! -z "$path" ]; then + # Validating absolute path + rpath=$(readlink -f "$path") + if [ -z "$(echo $rpath |grep $homedir)" ]; then + exit 1 + fi +else + path=$homedir +fi + +# Listing files +find "$path" -maxdepth 1 -printf "%y/%m/%TY-%Tm-%Td/%TH:%TM:%TS/%u/%g/%s/%P\n" + + +exit diff --git a/bin/v-list-sys-rrd b/bin/v-list-sys-rrd index 49b0b2e78..2dc026b91 100755 --- a/bin/v-list-sys-rrd +++ b/bin/v-list-sys-rrd @@ -37,6 +37,9 @@ json_list_rrd() { [ "$type" = 'ssh' ]; then title="$(echo $rrd| tr '[:lower:]' '[:upper:]') Usage" fi + if [ "$type" = 'mail' ]; then + title="Exim Usage" + fi if [ "$type" = 'db' ]; then db_type=$(echo $rrd|cut -f 1 -d _ |sed -e 's/mysql/MySQL/g' \ -e 's/pgsql/PostgreSQL/g' ) @@ -84,14 +87,14 @@ if [ -n "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then rrd_types="$rrd_types web" fi +if [ -n "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then + rrd_types="$rrd_types mail" +fi + if [ -n "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then rrd_types="$rrd_types db" fi -#if [ -n "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then -# rrd_types="$rrd_types mail" -#fi - if [ -n "$FTP_SYSTEM" ] && [ "$FTP_SYSTEM" != 'no' ]; then rrd_types="$rrd_types ftp" fi diff --git a/bin/v-list-user b/bin/v-list-user index ea818ac1f..817fb8422 100755 --- a/bin/v-list-user +++ b/bin/v-list-user @@ -70,6 +70,7 @@ is_object_valid 'user' 'USER' "$user" # Defining config conf=$USER_DATA/user.conf +HOME=$HOMEDIR/$user # Defining fileds to select fields='$USER $FNAME $LNAME $PACKAGE $WEB_TEMPLATE $PROXY_TEMPLATE @@ -81,7 +82,7 @@ fields='$USER $FNAME $LNAME $PACKAGE $WEB_TEMPLATE $PROXY_TEMPLATE $U_DISK_DIRS $U_DISK_WEB $U_DISK_MAIL $U_DISK_DB $U_BANDWIDTH $U_WEB_DOMAINS $U_WEB_SSL $U_WEB_ALIASES $U_DNS_DOMAINS $U_DNS_RECORDS $U_MAIL_DOMAINS $U_MAIL_DKIM $U_MAIL_ACCOUNTS $U_DATABASES $U_CRON_JOBS - $U_BACKUPS $LANGUAGE $TIME $DATE' + $U_BACKUPS $LANGUAGE $HOME $TIME $DATE' # Listing user case $format in diff --git a/bin/v-list-user-ns b/bin/v-list-user-ns index d296191b3..1da0fe5f1 100755 --- a/bin/v-list-user-ns +++ b/bin/v-list-user-ns @@ -21,7 +21,7 @@ json_list_ns() { ns=$(grep "^NS='" $USER_DATA/user.conf |cut -f 2 -d \') echo '[' i=1 - nslistc=$(echo -e "${ns//,/\n}"|wc -l) + nslistc=$(echo -e "${ns//,/\\n}"|wc -l) for nameserver in ${ns//,/ };do if [ "$i" -ne "$nslistc" ]; then echo -e "\t\"$nameserver\"," diff --git a/bin/v-list-web-domain b/bin/v-list-web-domain index 9a8ea34d7..8a1c794de 100755 --- a/bin/v-list-web-domain +++ b/bin/v-list-web-domain @@ -76,7 +76,11 @@ conf=$USER_DATA/web.conf # Defining fileds to select fields='$DOMAIN $IP $IP6 $U_DISK $U_BANDWIDTH $TPL $ALIAS $STATS $STATS_USER - $SSL $SSL_HOME $FTP_USER $PROXY $PROXY_EXT $SUSPENDED $TIME $DATE' + $SSL $SSL_HOME $FTP_USER $FTP_PATH $PROXY $PROXY_EXT $DOCUMENT_ROOT + $SUSPENDED $TIME $DATE' + +# Defining document root +DOCUMENT_ROOT="$HOMEDIR/$user/web/$domain/public_html" # Listing domains case $format in diff --git a/bin/v-list-web-domains b/bin/v-list-web-domains index d39b7aac8..95f061702 100755 --- a/bin/v-list-web-domains +++ b/bin/v-list-web-domains @@ -34,8 +34,8 @@ is_object_valid 'user' 'USER' "$user" conf=$USER_DATA/web.conf # Defining fileds to select -fields="\$DOMAIN \$IP \$IP6 \$U_DISK \$U_BANDWIDTH \$TPL \$ALIAS" -fields="$fields \$STATS \$STATS_USER \$SSL \$SSL_HOME \$FTP_USER" +fields="\$DOMAIN \$IP \$IP6 \$U_DISK \$U_BANDWIDTH \$TPL \$ALIAS \$STATS" +fields="$fields \$STATS_USER \$SSL \$SSL_HOME \$FTP_USER \$FTP_PATH" fields="$fields \$PROXY \$PROXY_EXT \$SUSPENDED \$TIME \$DATE" # Listing domains diff --git a/bin/v-open-fs-file b/bin/v-open-fs-file new file mode 100755 index 000000000..d5c8ea3a6 --- /dev/null +++ b/bin/v-open-fs-file @@ -0,0 +1,36 @@ +#!/bin/bash +# File reader + +user=$1 +path=$2 + +# Checking arguments +if [ -z "$path" ]; then + echo "Usage: USER PATH" + exit 1 +fi + +# Checking users +if [ ! -e "$VESTA/data/users/$user" ]; then + exit 1 +fi + +# Checking homedir +homedir=$(grep "^$user:" /etc/passwd | cut -f 6 -d :) +if [ -z $homedir ]; then + exit 1 +fi + +# Checking path +if [ ! -z "$path" ]; then + # Validating absolute path + rpath=$(readlink -f "$path") + if [ -z "$(echo $rpath |grep $homedir)" ]; then + exit 1 + fi +fi + +cat "$path" + +exit + diff --git a/bin/v-restore-user b/bin/v-restore-user index 1615e6ce6..5971ca836 100755 --- a/bin/v-restore-user +++ b/bin/v-restore-user @@ -363,11 +363,16 @@ if [ "$web" != 'no' ]; then exit $E_PARSING fi + # Fix for tar < 1.24 + find $HOMEDIR/$user/web/$domain -type d \ + -exec chown -h $user:$user {} \; + # ReChown files if uid differs if [ "$old_uid" -ne "$new_uid" ]; then find $HOMEDIR/$user/web/$domain/ -user $old_uid \ -exec chown -h $user:$user {} \; fi + done # Restart WEB diff --git a/bin/v-update-sys-rrd b/bin/v-update-sys-rrd index 6420f6079..81cc6d64e 100755 --- a/bin/v-update-sys-rrd +++ b/bin/v-update-sys-rrd @@ -110,6 +110,11 @@ for period in $periods; do $BIN/v-update-sys-rrd-$PROXY_SYSTEM $period >/dev/null 2>&1 fi + # Updating mail stats + if [ ! -z "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then + $BIN/v-update-sys-rrd-mail $period >/dev/null 2>&1 + fi + # Updating ftp stats if [ ! -z "$FTP_SYSTEM" ] && [ "$FTP_SYSTEM" != 'no' ]; then $BIN/v-update-sys-rrd-ftp $period >/dev/null 2>&1 diff --git a/bin/v-update-sys-rrd-mail b/bin/v-update-sys-rrd-mail new file mode 100755 index 000000000..1f01b52d3 --- /dev/null +++ b/bin/v-update-sys-rrd-mail @@ -0,0 +1,96 @@ +#!/bin/bash +# info: update mail rrd +# options: PERIOD +# +# The function is for updating mail rrd database and graphic. + + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +# Argument defenition +period=${1-daily} + +# Includes +source $VESTA/func/main.sh +source $VESTA/conf/vesta.conf + + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +# Switching on time period +case $period in + daily) start='-1d'; end='now'; grid='MINUTE:30:HOUR:1:HOUR:4:0:%H:%M';; + weekly) start='-7d'; end='now'; grid='HOUR:8:DAY:1:DAY:1:0:%a %d';; + monthly) start='-1m'; end='now'; grid='WEEK:1:WEEK:1:WEEK:1:0:%b %d';; + yearly) start='-1y'; end='now'; grid='MONTH:1:YEAR:1:MONTH:2:2419200:%b';; + *) exit $E_RRD ;; +esac + +# Checking directory +if [ ! -d "$RRD/mail" ]; then + mkdir $RRD/mail +fi + +# Checking database +if [ ! -e "$RRD/mail/mail.rrd" ]; then + # Adding database + rrdtool create $RRD/mail/mail.rrd --step $RRD_STEP \ + DS:A:GAUGE:600:U:U \ + RRA:AVERAGE:0.5:1:600 \ + RRA:AVERAGE:0.5:6:700 \ + RRA:AVERAGE:0.5:24:775 \ + RRA:AVERAGE:0.5:288:797 \ + RRA:MAX:0.5:1:600 \ + RRA:MAX:0.5:6:700 \ + RRA:MAX:0.5:24:775 \ + RRA:MAX:0.5:288:797 +fi + +# Parsing data +if [ "$period" = 'daily' ]; then + a=0 + a=$(exim -bpc) + + # Updating rrd database + rrdtool update $RRD/mail/mail.rrd N:$a +fi + +# Updating daily graph +rrdtool graph $RRD/mail/$period-mail.png \ + --imgformat PNG \ + --height="120" \ + --width="440" \ + --start "$start" \ + --end "$end" \ + --vertical-label "Queue Size" \ + --x-grid "$grid" \ + -c "BACK#7a766d" \ + -c "SHADEA#7a766d" \ + -c "SHADEB#7a766d" \ + -c "FONT#FFFFFF" \ + -c "CANVAS#302c2d" \ + -c "GRID#666666" \ + -c "MGRID#AAAAAA" \ + -c "FRAME#302c2d" \ + -c "ARROW#FFFFFF" \ + DEF:a=$RRD/mail/mail.rrd:A:AVERAGE \ + COMMENT:'\r' \ + LINE1:a#fefda0:"Emails " \ + GPRINT:a:'LAST:Current\:''%8.0lf' \ + GPRINT:a:'MIN:Min\:''%8.0lf' \ + GPRINT:a:'MAX:Max\:''%8.0lf\j' &>/dev/null; result=$? + + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +if [ "$result" -ne 0 ]; then + exit $E_RRD +fi + +exit diff --git a/bin/v-update-user-backup-exclusions b/bin/v-update-user-backup-exclusions index 7cb2f6678..898a1d55b 100755 --- a/bin/v-update-user-backup-exclusions +++ b/bin/v-update-user-backup-exclusions @@ -67,7 +67,7 @@ echo "WEB='$WEB'" > $USER_DATA/backup-excludes.conf echo "DNS='$DNS'" >> $USER_DATA/backup-excludes.conf echo "MAIL='$MAIL'" >> $USER_DATA/backup-excludes.conf echo "DB='$DB'" >> $USER_DATA/backup-excludes.conf -echo "CRON='$DB'" >> $USER_DATA/backup-excludes.conf +echo "CRON='$CRON'" >> $USER_DATA/backup-excludes.conf echo "USER='$USER'" >> $USER_DATA/backup-excludes.conf chmod 660 $USER_DATA/backup-excludes.conf diff --git a/func/db.sh b/func/db.sh index fbcc4670d..2489e3d91 100644 --- a/func/db.sh +++ b/func/db.sh @@ -337,20 +337,20 @@ dump_mysql_database() { fi query='SELECT VERSION()' - mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1 + mysql -h $HOST -u $USER -p$PASSWORD -e "$query" >/dev/null 2>/tmp/e.mysql if [ '0' -ne "$?" ]; then rm -rf $tmpdir - echo "Can't connect to mysql server $HOST" |\ + echo -e "Can't connect to $HOST\n$(cat /tmp/e.mysql)" |\ $send_mail -s "$subj" $email echo "Error: Connection failed" log_event "$E_CONNECT $EVENT" exit $E_CONNECT fi - mysqldump -h $HOST -u $USER -p$PASSWORD -r $dump $database + mysqldump -h $HOST -u $USER -p$PASSWORD -r $dump $database 2>/tmp/e.mysql if [ '0' -ne "$?" ]; then rm -rf $tmpdir - echo "Can't dump mysql database $database" |\ + echo -e "Can't dump database $database\n$(cat /tmp/e.mysql)" |\ $send_mail -s "$subj" $email echo "Error: dump $database failed" log_event "$E_DB $EVENT" diff --git a/func/domain.sh b/func/domain.sh index 1bf1cde8a..65d62f73d 100644 --- a/func/domain.sh +++ b/func/domain.sh @@ -327,15 +327,9 @@ is_web_domain_cert_valid() { fi if [ -e "$ssl_dir/$domain.ca" ]; then - ca_vrf=$(openssl verify $ssl_dir/$domain.ca 2>/dev/null |grep 'OK') - if [ -z "$ca_vrf" ]; then - echo "Error: ssl certificate authority is not valid" - log_event "$E_INVALID" "$EVENT" - exit $E_INVALID - fi - - crt_vrf=$(openssl verify -untrusted $ssl_dir/$domain.ca \ - $ssl_dir/$domain.crt 2>/dev/null |grep 'OK') + crt_vrf=$(openssl verify -purpose sslserver \ + -CAfile $ssl_dir/$domain.ca $ssl_dir/$domain.crt 2>/dev/null |\ + grep 'OK') if [ -z "$crt_vrf" ]; then echo "Error: root or/and intermediate cerificate not found" log_event "$E_NOTEXIST" "$EVENT" @@ -491,9 +485,9 @@ is_dns_nameserver_valid() { if [ ! -z "$remote" ]; then zone=$USER_DATA/dns/$d.conf a_record=$(echo $r |cut -f 1 -d '.') - record=$(grep "RECORD='$a_record'" $zone| grep "TYPE='A'") - if [ -z "$record" ]; then - echo "Error: corresponding A record $a_record.$d is not exist" + n_record=$(grep "RECORD='$a_record'" $zone| grep "TYPE='A'") + if [ -z "$n_record" ]; then + echo "Error: corresponding A record $a_record.$d does not exist" log_event "$E_NOTEXIST" "$EVENT" exit $E_NOTEXIST fi diff --git a/func/main.sh b/func/main.sh index 93cb4caa1..6864545cb 100644 --- a/func/main.sh +++ b/func/main.sh @@ -740,11 +740,16 @@ validate_format_mhdmw() { # proxy extention or DNS record validate_format_common() { exclude="[!|#|$|^|&|(|)|+|=|{|}|:|<|>|?|/|\|\"|'|;|%|\`| ]" - if [[ "$1" =~ $exclude ]] || [ 200 -le ${#1} ]; then + if [[ "$1" =~ $exclude ]]; then echo "Error: $2 $1 is not valid" log_event "$E_INVALID" "$EVENT" exit $E_INVALID fi + if [ 400 -le ${#1} ]; then + echo "Error: $2 $1 is too long" + log_event "$E_INVALID" "$EVENT" + exit $E_INVALID + fi } # DNS record value diff --git a/func/rebuild.sh b/func/rebuild.sh index de3cc4fec..22ca03106 100644 --- a/func/rebuild.sh +++ b/func/rebuild.sh @@ -318,21 +318,36 @@ rebuild_web_domain_conf() { $WEBTPL/$PROXY_SYSTEM/$PROXY.sh $user $domain $ip $HOMEDIR $docroot fi - # Checking ftp - if [ ! -z "$FTP_USER" ]; then - if [ -z "$(grep ^$FTP_USER: /etc/passwd)" ]; then - shell='/sbin/nologin' - if [ -e "/usr/bin/rssh" ]; then - shell='/usr/bin/rssh' - fi - /usr/sbin/useradd $FTP_USER \ + # Defining ftp user shell + if [ -z "$FTP_SHELL" ]; then + shell='/sbin/nologin' + if [ -e "/usr/bin/rssh" ]; then + shell='/usr/bin/rssh' + fi + else + shell=$FTP_SHELL + fi + + # Checking ftp users + for ftp_user in ${FTP_USER//:/ }; do + if [ -z "$(grep ^$ftp_user: /etc/passwd)" ]; then + # Parsing ftp user variables + position=$(echo $FTP_USER | tr ':' '\n' | grep -n '' |\ + grep ":$ftp_user$" | cut -f 1 -d:) + ftp_path=$(echo $FTP_PATH | tr ':' '\n' | grep -n '' |\ + grep "^$position:" | cut -f 2 -d :) + ftp_md5=$(echo $FTP_MD5 | tr ':' '\n' | grep -n '' |\ + grep "^$position:" | cut -f 2 -d :) + + # Adding ftp user + /usr/sbin/useradd $ftp_user \ -s $shell \ -o -u $(id -u $user) \ -g $(id -u $user) \ - -M -d "$HOMEDIR/$user/web/$domain" > /dev/null 2>&1 + -M -d "$HOMEDIR/$user/web/$domain${ftp_path}" >/dev/null 2>&1 - # Update password - shadow=$(grep "^$FTP_USER:" /etc/shadow) + # Updating ftp user password + shadow=$(grep "^$ftp_user:" /etc/shadow) shdw3=$(echo "$shadow" | cut -f3 -d :) shdw4=$(echo "$shadow" | cut -f4 -d :) shdw5=$(echo "$shadow" | cut -f5 -d :) @@ -340,15 +355,14 @@ rebuild_web_domain_conf() { shdw7=$(echo "$shadow" | cut -f7 -d :) shdw8=$(echo "$shadow" | cut -f8 -d :) shdw9=$(echo "$shadow" | cut -f9 -d :) - shadow_str="$FTP_USER:$FTP_MD5:$shdw3:$shdw4:$shdw5:$shdw6" + shadow_str="$ftp_user:$ftp_md5:$shdw3:$shdw4:$shdw5:$shdw6" shadow_str="$shadow_str:$shdw7:$shdw8:$shdw9" - chmod u+w /etc/shadow - sed -i "/^$FTP_USER:*/d" /etc/shadow + sed -i "/^$ftp_user:*/d" /etc/shadow echo "$shadow_str" >> /etc/shadow chmod u-w /etc/shadow fi - fi + done } # DNS domain rebuild diff --git a/func/remote.sh b/func/remote.sh index 8f386594a..61b050065 100644 --- a/func/remote.sh +++ b/func/remote.sh @@ -6,11 +6,21 @@ send_api_cmd() { USER=admin fi - auth="user=$USER&password=$PASSWORD&returncode=yes" - cmd="cmd=$1" - args="arg1=$2&arg2=$3&arg3=$4&arg4=$5&arg5=$6&arg6=$7&arg7=$8&arg8=$9" - args=$(echo "$args" |sed -e "s/+/%2B/g") - answer=$(curl -s -k --data "$auth&$cmd&$args" https://$HOST:$PORT/api/) + answer=$(curl -s -k \ + --data-urlencode "user=$USER" \ + --data-urlencode "password=$PASSWORD" \ + --data-urlencode "returncode=yes" \ + --data-urlencode "cmd=$1" \ + --data-urlencode "arg1=$2" \ + --data-urlencode "arg2=$3" \ + --data-urlencode "arg3=$4" \ + --data-urlencode "arg4=$5" \ + --data-urlencode "arg5=$6" \ + --data-urlencode "arg6=$7" \ + --data-urlencode "arg7=$8" \ + --data-urlencode "arg8=$9" \ + https://$HOST:$PORT/api/) + if [ "$answer" != '0' ]; then return 1 else @@ -90,7 +100,7 @@ is_dnshost_alive() { $send_cmd v-list-sys-config if [ $? -ne 0 ]; then echo "Error: $type connection to $HOST failed" - log_event "$E_CONNECT $EVENT" + log_event "$E_CONNECT" "$EVENT" exit $E_CONNECT fi @@ -104,7 +114,7 @@ is_dnshost_alive() { $send_cmd v-list-user $DNS_USER if [ $? -ne 0 ]; then echo "Error: dns user $DNS_USER doesn't exist" - log_event "$E_NOTEXIST $EVENT" + log_event "$E_NOTEXIST" "$EVENT" exit $E_NOTEXIST fi } @@ -146,7 +156,7 @@ remote_dns_health_check() { echo -e "\n\n--\nVesta Control Panel\n$(hostname)" >> $tmpfile cat $tmpfile | $send_mail -s "$subj" $email - log_event "$E_CONNECT $EVENT" + log_event "$E_CONNECT" "$EVENT" dconf="../../../conf/dns-cluster" update_object_value "$dconf" 'HOST' "$HOST" '$SUSPENDED' 'yes' fi diff --git a/install/debian/exim4.conf.template b/install/debian/exim4.conf.template index a5d353a33..742f0409e 100644 --- a/install/debian/exim4.conf.template +++ b/install/debian/exim4.conf.template @@ -1,14 +1,18 @@ -########################################################################## +###################################################################### +# # +# Exim configuration file for Vesta Control Panel # +# # +###################################################################### + #SPAMASSASSIN = yes -SPAM_SCORE = 50 -CLAMD = yes -########################################################################## +#SPAM_SCORE = 50 +#CLAMD = yes domainlist local_domains = dsearch;/etc/exim4/domains/ domainlist relay_to_domains = dsearch;/etc/exim4/domains/ -hostlist relay_from_hosts = 127.0.0.1 -hostlist whitelist = net-iplsearch;/etc/exim4/white-blocks.conf -hostlist spammers = net-iplsearch;/etc/exim4/spam-blocks.conf +hostlist relay_from_hosts = 127.0.0.1 +hostlist whitelist = net-iplsearch;/etc/exim4/white-blocks.conf +hostlist spammers = net-iplsearch;/etc/exim4/spam-blocks.conf no_local_from_check untrusted_set_sender = * acl_smtp_connect = acl_check_spammers @@ -43,43 +47,38 @@ DKIM_FILE = /etc/exim4/domains/${lc:${domain:$h_from:}}/dkim.pem DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}} -########################################################################## + +###################################################################### +# ACL CONFIGURATION # +# Specifies access control lists for incoming SMTP mail # +###################################################################### begin acl -########################################################################## + acl_check_spammers: - accept hosts = +whitelist + accept hosts = +whitelist + drop message = Your host in blacklist on this server. log_message = Host in blacklist hosts = +spammers - deny message = rejected because $sender_host_address is in a black list at $dnslist_domain\\n$dnslist_text - dnslists = ${readfile {/etc/exim4/dnsbl.conf}{:}} + accept + acl_check_mail: - deny - condition = ${if eq{$sender_helo_name}{}} + deny condition = ${if eq{$sender_helo_name}{}} message = HELO required before MAIL -# drop -# condition = ${if isip{$sender_helo_name}} -# message = Access denied - Invalid HELO name (See RFC2821 4.1.3) + drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid condition = ${if match{$sender_helo_name}{\N((\d{1,3}[.-]\d{1,3}[.-]\d{1,3}[.-]\d{1,3})|([0-9a-f]{8})|([0-9A-F]{8}))\N}{yes}{no}} condition = ${if match {${lookup dnsdb{>: defer_never,ptr=$sender_host_address}}\}{$sender_helo_name}{no}{yes}} delay = 45s -# drop -# condition = ${if match{$sender_helo_name}{\N^\[\N}{no}{yes}} -# condition = ${if match{$sender_helo_name}{\N\.\N}{no}{yes}} -# message = Access denied - Invalid HELO name (See RFC2821 4.1.1.1) - drop - condition = ${if isip{$sender_helo_name}} + + drop condition = ${if isip{$sender_helo_name}} message = Access denied - Invalid HELO name (See RFC2821 4.1.3) -# drop -# condition = ${if match{$sender_helo_name}{\N\.$\N}} -# message = Access denied - Invalid HELO name (See RFC2821 4.1.1.1) -# drop message = "REJECTED - Bad HELO - Host impersonating [$sender_helo_name]" -# condition = ${if match{$sender_helo_name}{$primary_hostname}} + drop condition = ${if eq{[$interface_address]}{$sender_helo_name}} message = $interface_address is _my_ address + accept @@ -102,6 +101,10 @@ acl_check_rcpt: accept authenticated = * control = submission/domain= + deny message = Rejected because $sender_host_address is in a black list at $dnslist_domain\n$dnslist_text + hosts = !+whitelist + dnslists = ${readfile {/etc/exim4/dnsbl.conf}{:}} + require message = relay not permitted domains = +local_domains : +relay_to_domains @@ -113,27 +116,30 @@ acl_check_rcpt: .ifdef CLAMD warn set acl_m0 = no + warn condition = ${if exists {/etc/exim4/domains/$domain/antivirus}{yes}{no}} set acl_m0 = yes .endif + .ifdef SPAMASSASSIN warn set acl_m1 = no + warn condition = ${if exists {/etc/exim4/domains/$domain/antispam}{yes}{no}} set acl_m1 = yes .endif + accept acl_check_data: .ifdef CLAMD - deny message = Message contains a virus ($malware_name) and has been rejected + deny message = Message contains a virus ($malware_name) and has been rejected malware = * condition = ${if eq{$acl_m0}{yes}{yes}{no}} .endif .ifdef SPAMASSASSIN - warn - !authenticated = * + warn !authenticated = * hosts = !+relay_from_hosts condition = ${if < {$message_size}{100K}} condition = ${if eq{$acl_m1}{yes}{yes}{no}} @@ -142,23 +148,29 @@ acl_check_data: add_header = X-Spam-Bar: $spam_bar add_header = X-Spam-Report: $spam_report set acl_m2 = $spam_score_int - warn - condition = ${if !eq{$acl_m2}{} {yes}{no}} + + warn condition = ${if !eq{$acl_m2}{} {yes}{no}} condition = ${if >{$acl_m2}{SPAM_SCORE} {yes}{no}} add_header = X-Spam-Status: Yes message = SpamAssassin detected spam (from $sender_address to $recipients). .endif + accept acl_check_mime: - deny message = Blacklisted file extension detected - condition = ${if match {${lc:$mime_filename}}{\N(\.ade|\.adp|\.bat|\.chm|\.cmd|\.com|\.cpl|\.exe|\.hta|\.ins|\.isp|\.jse|\.lib|\.lnk|\.mde|\.msc|\.msp|\.mst|\.pif|\.scr|\.sct|\.shb|\.sys|\.vb|\.vbe|\.vbs|\.vxd|\.wsc|\.wsf|\.wsh)$\N}{1}{0}} + deny message = Blacklisted file extension detected + condition = ${if match {${lc:$mime_filename}}{\N(\.ade|\.adp|\.bat|\.chm|\.cmd|\.com|\.cpl|\.exe|\.hta|\.ins|\.isp|\.jse|\.lib|\.lnk|\.mde|\.msc|\.msp|\.mst|\.pif|\.scr|\.sct|\.shb|\.sys|\.vb|\.vbe|\.vbs|\.vxd|\.wsc|\.wsf|\.wsh)$\N}{1}{0}} + accept -########################################################################## + + +###################################################################### +# AUTHENTICATION CONFIGURATION # +###################################################################### begin authenticators -########################################################################## + dovecot_plain: driver = dovecot public_name = PLAIN @@ -171,9 +183,14 @@ dovecot_login: server_socket = /var/run/dovecot/auth-client server_set_id = $auth1 -########################################################################## + + +###################################################################### +# ROUTERS CONFIGURATION # +# Specifies how addresses are handled # +###################################################################### begin routers -########################################################################## + #smarthost: # driver = manualroute # domains = ! +local_domains @@ -253,9 +270,12 @@ terminate_alias: condition = ${lookup{$local_part@$domain}lsearch{/etc/exim4/domains/$domain/aliases}{true}{false}} -########################################################################## + +###################################################################### +# TRANSPORTS CONFIGURATION # +###################################################################### begin transports -########################################################################## + remote_smtp: driver = smtp #helo_data = $sender_address_domain @@ -265,7 +285,6 @@ remote_smtp: dkim_canon = relaxed dkim_strict = 0 - procmail: driver = pipe command = "/usr/bin/procmail -d $local_part" @@ -306,7 +325,7 @@ local_spam_delivery: delivery_date_add envelope_to_add return_path_add - directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}/mail/$domain/$local_part/.spam" + directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}/mail/$domain/$local_part/.Spam" quota = ${extract{6}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}M quota_directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}/mail/$domain/$local_part" quota_warn_threshold = 75% @@ -335,8 +354,24 @@ devnull: driver = appendfile file = /dev/null -########################################################################## + + +###################################################################### +# RETRY CONFIGURATION # +###################################################################### begin retry + +# Address or Domain Error Retries +# ----------------- ----- ------- * * F,2h,15m; G,16h,1h,1.5; F,4d,6h -########################################################################## + + + +###################################################################### +# REWRITE CONFIGURATION # +###################################################################### begin rewrite + + + +###################################################################### diff --git a/install/rhel/exim-smarthost.conf b/install/rhel/exim-smarthost.conf index 99b1c90c7..086ca6507 100644 --- a/install/rhel/exim-smarthost.conf +++ b/install/rhel/exim-smarthost.conf @@ -1,14 +1,18 @@ -########################################################################## +###################################################################### +# # +# Exim configuration file for Vesta Control Panel # +# # +###################################################################### + #SPAMASSASSIN = yes -SPAM_SCORE = 10 +#SPAM_SCORE = 50 #CLAMD = yes -########################################################################## domainlist local_domains = dsearch;/etc/exim/domains/ domainlist relay_to_domains = dsearch;/etc/exim/domains/ -hostlist relay_from_hosts = 127.0.0.1 -hostlist whitelist = net-iplsearch;/etc/exim/white-blocks.conf -hostlist spammers = net-iplsearch;/etc/exim/spam-blocks.conf +hostlist relay_from_hosts = 127.0.0.1 +hostlist whitelist = net-iplsearch;/etc/exim/white-blocks.conf +hostlist spammers = net-iplsearch;/etc/exim/spam-blocks.conf no_local_from_check untrusted_set_sender = * acl_smtp_connect = acl_check_spammers @@ -43,43 +47,37 @@ DKIM_FILE = /etc/exim/domains/${lc:${domain:$h_from:}}/dkim.pem DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}} -########################################################################## +###################################################################### +# ACL CONFIGURATION # +# Specifies access control lists for incoming SMTP mail # +###################################################################### begin acl -########################################################################## + acl_check_spammers: - accept hosts = +whitelist + accept hosts = +whitelist + drop message = Your host in blacklist on this server. log_message = Host in blacklist hosts = +spammers - deny message = rejected because $sender_host_address is in a black list at $dnslist_domain\\n$dnslist_text - dnslists = ${readfile {/etc/exim/dnsbl.conf}{:}} + accept + acl_check_mail: - deny - condition = ${if eq{$sender_helo_name}{}} + deny condition = ${if eq{$sender_helo_name}{}} message = HELO required before MAIL -# drop -# condition = ${if isip{$sender_helo_name}} -# message = Access denied - Invalid HELO name (See RFC2821 4.1.3) + drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid condition = ${if match{$sender_helo_name}{\N((\d{1,3}[.-]\d{1,3}[.-]\d{1,3}[.-]\d{1,3})|([0-9a-f]{8})|([0-9A-F]{8}))\N}{yes}{no}} condition = ${if match {${lookup dnsdb{>: defer_never,ptr=$sender_host_address}}\}{$sender_helo_name}{no}{yes}} delay = 45s -# drop -# condition = ${if match{$sender_helo_name}{\N^\[\N}{no}{yes}} -# condition = ${if match{$sender_helo_name}{\N\.\N}{no}{yes}} -# message = Access denied - Invalid HELO name (See RFC2821 4.1.1.1) - drop - condition = ${if isip{$sender_helo_name}} + + drop condition = ${if isip{$sender_helo_name}} message = Access denied - Invalid HELO name (See RFC2821 4.1.3) -# drop -# condition = ${if match{$sender_helo_name}{\N\.$\N}} -# message = Access denied - Invalid HELO name (See RFC2821 4.1.1.1) -# drop message = "REJECTED - Bad HELO - Host impersonating [$sender_helo_name]" -# condition = ${if match{$sender_helo_name}{$primary_hostname}} + drop condition = ${if eq{[$interface_address]}{$sender_helo_name}} message = $interface_address is _my_ address + accept @@ -102,6 +100,10 @@ acl_check_rcpt: accept authenticated = * control = submission/domain= + deny message = Rejected because $sender_host_address is in a black list at $dnslist_domain\n$dnslist_text + hosts = !+whitelist + dnslists = ${readfile {/etc/exim/dnsbl.conf}{:}} + require message = relay not permitted domains = +local_domains : +relay_to_domains @@ -113,27 +115,30 @@ acl_check_rcpt: .ifdef CLAMD warn set acl_m0 = no + warn condition = ${if exists {/etc/exim/domains/$domain/antivirus}{yes}{no}} set acl_m0 = yes .endif + .ifdef SPAMASSASSIN warn set acl_m1 = no + warn condition = ${if exists {/etc/exim/domains/$domain/antispam}{yes}{no}} set acl_m1 = yes .endif + accept acl_check_data: .ifdef CLAMD - deny message = Message contains a virus ($malware_name) and has been rejected + deny message = Message contains a virus ($malware_name) and has been rejected malware = * condition = ${if eq{$acl_m0}{yes}{yes}{no}} .endif .ifdef SPAMASSASSIN - warn - !authenticated = * + warn !authenticated = * hosts = !+relay_from_hosts condition = ${if < {$message_size}{100K}} condition = ${if eq{$acl_m1}{yes}{yes}{no}} @@ -142,23 +147,29 @@ acl_check_data: add_header = X-Spam-Bar: $spam_bar add_header = X-Spam-Report: $spam_report set acl_m2 = $spam_score_int - warn - condition = ${if !eq{$acl_m2}{} {yes}{no}} + + warn condition = ${if !eq{$acl_m2}{} {yes}{no}} condition = ${if >{$acl_m2}{SPAM_SCORE} {yes}{no}} add_header = X-Spam-Status: Yes message = SpamAssassin detected spam (from $sender_address to $recipients). .endif + accept acl_check_mime: deny message = Blacklisted file extension detected condition = ${if match {${lc:$mime_filename}}{\N(\.ade|\.adp|\.bat|\.chm|\.cmd|\.com|\.cpl|\.exe|\.hta|\.ins|\.isp|\.jse|\.lib|\.lnk|\.mde|\.msc|\.msp|\.mst|\.pif|\.scr|\.sct|\.shb|\.sys|\.vb|\.vbe|\.vbs|\.vxd|\.wsc|\.wsf|\.wsh)$\N}{1}{0}} + accept -########################################################################## + + +###################################################################### +# AUTHENTICATION CONFIGURATION # +###################################################################### begin authenticators -########################################################################## + login: driver = plaintext public_name = LOGIN @@ -178,9 +189,13 @@ dovecot_login: server_set_id = $auth1 -########################################################################## + +###################################################################### +# ROUTERS CONFIGURATION # +# Specifies how addresses are handled # +###################################################################### begin routers -########################################################################## + smarthost: driver = manualroute domains = ! +local_domains @@ -258,9 +273,12 @@ terminate_alias: condition = ${lookup{$local_part@$domain}lsearch{/etc/exim/domains/$domain/aliases}{true}{false}} -########################################################################## + +###################################################################### +# TRANSPORTS CONFIGURATION # +###################################################################### begin transports -########################################################################## + remote_smtp: driver = smtp dkim_domain = DKIM_DOMAIN @@ -314,7 +332,7 @@ local_spam_delivery: delivery_date_add envelope_to_add return_path_add - directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim/domains/$domain/passwd}}}}/mail/$domain/$local_part/.spam" + directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim/domains/$domain/passwd}}}}/mail/$domain/$local_part/.Spam" quota = ${extract{6}{:}{${lookup{$local_part}lsearch{/etc/exim/domains/$domain/passwd}}}}M quota_directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim/domains/$domain/passwd}}}}/mail/$domain/$local_part" quota_warn_threshold = 75% @@ -343,8 +361,24 @@ devnull: driver = appendfile file = /dev/null -########################################################################## + + +###################################################################### +# RETRY CONFIGURATION # +###################################################################### begin retry + +# Address or Domain Error Retries +# ----------------- ----- ------- * * F,2h,15m; G,16h,1h,1.5; F,4d,6h -########################################################################## + + + +###################################################################### +# REWRITE CONFIGURATION # +###################################################################### begin rewrite + + + +###################################################################### diff --git a/install/rhel/exim.conf b/install/rhel/exim.conf index 8567cb181..0f9830168 100644 --- a/install/rhel/exim.conf +++ b/install/rhel/exim.conf @@ -1,14 +1,18 @@ -########################################################################## +###################################################################### +# # +# Exim configuration file for Vesta Control Panel # +# # +###################################################################### + #SPAMASSASSIN = yes -SPAM_SCORE = 50 +#SPAM_SCORE = 50 #CLAMD = yes -########################################################################## domainlist local_domains = dsearch;/etc/exim/domains/ domainlist relay_to_domains = dsearch;/etc/exim/domains/ -hostlist relay_from_hosts = 127.0.0.1 -hostlist whitelist = net-iplsearch;/etc/exim/white-blocks.conf -hostlist spammers = net-iplsearch;/etc/exim/spam-blocks.conf +hostlist relay_from_hosts = 127.0.0.1 +hostlist whitelist = net-iplsearch;/etc/exim/white-blocks.conf +hostlist spammers = net-iplsearch;/etc/exim/spam-blocks.conf no_local_from_check untrusted_set_sender = * acl_smtp_connect = acl_check_spammers @@ -26,8 +30,8 @@ av_scanner = clamd: /var/run/clamav/clamd.sock .endif tls_advertise_hosts = * -tls_certificate = /etc/pki/tls/certs/exim.pem -tls_privatekey = /etc/pki/tls/private/exim.pem +tls_certificate = /usr/local/vesta/ssl/certificate.crt +tls_privatekey = /usr/local/vesta/ssl/certificate.key daemon_smtp_ports = 25 : 465 : 587 : 2525 tls_on_connect_ports = 465 @@ -43,43 +47,38 @@ DKIM_FILE = /etc/exim/domains/${lc:${domain:$h_from:}}/dkim.pem DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}} -########################################################################## + +###################################################################### +# ACL CONFIGURATION # +# Specifies access control lists for incoming SMTP mail # +###################################################################### begin acl -########################################################################## + acl_check_spammers: - accept hosts = +whitelist + accept hosts = +whitelist + drop message = Your host in blacklist on this server. log_message = Host in blacklist hosts = +spammers - deny message = rejected because $sender_host_address is in a black list at $dnslist_domain\\n$dnslist_text - dnslists = ${readfile {/etc/exim/dnsbl.conf}{:}} + accept + acl_check_mail: - deny - condition = ${if eq{$sender_helo_name}{}} + deny condition = ${if eq{$sender_helo_name}{}} message = HELO required before MAIL -# drop -# condition = ${if isip{$sender_helo_name}} -# message = Access denied - Invalid HELO name (See RFC2821 4.1.3) + drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid condition = ${if match{$sender_helo_name}{\N((\d{1,3}[.-]\d{1,3}[.-]\d{1,3}[.-]\d{1,3})|([0-9a-f]{8})|([0-9A-F]{8}))\N}{yes}{no}} condition = ${if match {${lookup dnsdb{>: defer_never,ptr=$sender_host_address}}\}{$sender_helo_name}{no}{yes}} delay = 45s -# drop -# condition = ${if match{$sender_helo_name}{\N^\[\N}{no}{yes}} -# condition = ${if match{$sender_helo_name}{\N\.\N}{no}{yes}} -# message = Access denied - Invalid HELO name (See RFC2821 4.1.1.1) - drop - condition = ${if isip{$sender_helo_name}} + + drop condition = ${if isip{$sender_helo_name}} message = Access denied - Invalid HELO name (See RFC2821 4.1.3) -# drop -# condition = ${if match{$sender_helo_name}{\N\.$\N}} -# message = Access denied - Invalid HELO name (See RFC2821 4.1.1.1) -# drop message = "REJECTED - Bad HELO - Host impersonating [$sender_helo_name]" -# condition = ${if match{$sender_helo_name}{$primary_hostname}} + drop condition = ${if eq{[$interface_address]}{$sender_helo_name}} message = $interface_address is _my_ address + accept @@ -102,6 +101,10 @@ acl_check_rcpt: accept authenticated = * control = submission/domain= + deny message = Rejected because $sender_host_address is in a black list at $dnslist_domain\n$dnslist_text + hosts = !+whitelist + dnslists = ${readfile {/etc/exim/dnsbl.conf}{:}} + require message = relay not permitted domains = +local_domains : +relay_to_domains @@ -113,27 +116,30 @@ acl_check_rcpt: .ifdef CLAMD warn set acl_m0 = no + warn condition = ${if exists {/etc/exim/domains/$domain/antivirus}{yes}{no}} set acl_m0 = yes .endif + .ifdef SPAMASSASSIN warn set acl_m1 = no + warn condition = ${if exists {/etc/exim/domains/$domain/antispam}{yes}{no}} set acl_m1 = yes .endif + accept acl_check_data: .ifdef CLAMD - deny message = Message contains a virus ($malware_name) and has been rejected + deny message = Message contains a virus ($malware_name) and has been rejected malware = * condition = ${if eq{$acl_m0}{yes}{yes}{no}} .endif .ifdef SPAMASSASSIN - warn - !authenticated = * + warn !authenticated = * hosts = !+relay_from_hosts condition = ${if < {$message_size}{100K}} condition = ${if eq{$acl_m1}{yes}{yes}{no}} @@ -142,23 +148,29 @@ acl_check_data: add_header = X-Spam-Bar: $spam_bar add_header = X-Spam-Report: $spam_report set acl_m2 = $spam_score_int - warn - condition = ${if !eq{$acl_m2}{} {yes}{no}} + + warn condition = ${if !eq{$acl_m2}{} {yes}{no}} condition = ${if >{$acl_m2}{SPAM_SCORE} {yes}{no}} add_header = X-Spam-Status: Yes message = SpamAssassin detected spam (from $sender_address to $recipients). .endif + accept acl_check_mime: - deny message = Blacklisted file extension detected - condition = ${if match {${lc:$mime_filename}}{\N(\.ade|\.adp|\.bat|\.chm|\.cmd|\.com|\.cpl|\.exe|\.hta|\.ins|\.isp|\.jse|\.lib|\.lnk|\.mde|\.msc|\.msp|\.mst|\.pif|\.scr|\.sct|\.shb|\.sys|\.vb|\.vbe|\.vbs|\.vxd|\.wsc|\.wsf|\.wsh)$\N}{1}{0}} + deny message = Blacklisted file extension detected + condition = ${if match {${lc:$mime_filename}}{\N(\.ade|\.adp|\.bat|\.chm|\.cmd|\.com|\.cpl|\.exe|\.hta|\.ins|\.isp|\.jse|\.lib|\.lnk|\.mde|\.msc|\.msp|\.mst|\.pif|\.scr|\.sct|\.shb|\.sys|\.vb|\.vbe|\.vbs|\.vxd|\.wsc|\.wsf|\.wsh)$\N}{1}{0}} + accept -########################################################################## + + +###################################################################### +# AUTHENTICATION CONFIGURATION # +###################################################################### begin authenticators -########################################################################## + dovecot_plain: driver = dovecot public_name = PLAIN @@ -171,9 +183,14 @@ dovecot_login: server_socket = /var/run/dovecot/auth-client server_set_id = $auth1 -########################################################################## + + +###################################################################### +# ROUTERS CONFIGURATION # +# Specifies how addresses are handled # +###################################################################### begin routers -########################################################################## + #smarthost: # driver = manualroute # domains = ! +local_domains @@ -253,9 +270,12 @@ terminate_alias: condition = ${lookup{$local_part@$domain}lsearch{/etc/exim/domains/$domain/aliases}{true}{false}} -########################################################################## + +###################################################################### +# TRANSPORTS CONFIGURATION # +###################################################################### begin transports -########################################################################## + remote_smtp: driver = smtp #helo_data = $sender_address_domain @@ -265,7 +285,6 @@ remote_smtp: dkim_canon = relaxed dkim_strict = 0 - procmail: driver = pipe command = "/usr/bin/procmail -d $local_part" @@ -335,8 +354,23 @@ devnull: driver = appendfile file = /dev/null -########################################################################## + +###################################################################### +# RETRY CONFIGURATION # +###################################################################### begin retry + +# Address or Domain Error Retries +# ----------------- ----- ------- * * F,2h,15m; G,16h,1h,1.5; F,4d,6h -########################################################################## + + + +###################################################################### +# REWRITE CONFIGURATION # +###################################################################### begin rewrite + + + +###################################################################### diff --git a/install/rhel/httpd-pma.conf b/install/rhel/httpd-pma.conf index 0049ef2b7..3950860ef 100644 --- a/install/rhel/httpd-pma.conf +++ b/install/rhel/httpd-pma.conf @@ -37,3 +37,9 @@ Alias /phpmyadmin /usr/share/phpMyAdmin # SecRuleInheritance Off # # + + + Order Deny,Allow + Deny from All + Allow from None + diff --git a/install/rhel/httpd-webmail.conf b/install/rhel/httpd-webmail.conf index 3fbcd9971..6da647f93 100644 --- a/install/rhel/httpd-webmail.conf +++ b/install/rhel/httpd-webmail.conf @@ -6,7 +6,13 @@ Alias /roundcubemail /usr/share/roundcubemail Alias /webmail /usr/share/roundcubemail - Order Deny,Allow - Deny from all - Allow from all + Order Deny,Allow + Deny from all + Allow from all + + + + Order Deny,Allow + Deny from all + Allow from None diff --git a/install/ubuntu/dovecot/conf.d/10-ssl.conf b/install/ubuntu/dovecot/conf.d/10-ssl.conf index e1d444239..3aaff6eec 100644 --- a/install/ubuntu/dovecot/conf.d/10-ssl.conf +++ b/install/ubuntu/dovecot/conf.d/10-ssl.conf @@ -1,3 +1,3 @@ ssl = yes -ssl_cert = : defer_never,ptr=$sender_host_address}}\}{$sender_helo_name}{no}{yes}} delay = 45s -# drop -# condition = ${if match{$sender_helo_name}{\N^\[\N}{no}{yes}} -# condition = ${if match{$sender_helo_name}{\N\.\N}{no}{yes}} -# message = Access denied - Invalid HELO name (See RFC2821 4.1.1.1) - drop - condition = ${if isip{$sender_helo_name}} + + drop condition = ${if isip{$sender_helo_name}} message = Access denied - Invalid HELO name (See RFC2821 4.1.3) -# drop -# condition = ${if match{$sender_helo_name}{\N\.$\N}} -# message = Access denied - Invalid HELO name (See RFC2821 4.1.1.1) -# drop message = "REJECTED - Bad HELO - Host impersonating [$sender_helo_name]" -# condition = ${if match{$sender_helo_name}{$primary_hostname}} + drop condition = ${if eq{[$interface_address]}{$sender_helo_name}} message = $interface_address is _my_ address + accept @@ -102,6 +101,10 @@ acl_check_rcpt: accept authenticated = * control = submission/domain= + deny message = Rejected because $sender_host_address is in a black list at $dnslist_domain\n$dnslist_text + hosts = !+whitelist + dnslists = ${readfile {/etc/exim4/dnsbl.conf}{:}} + require message = relay not permitted domains = +local_domains : +relay_to_domains @@ -113,27 +116,30 @@ acl_check_rcpt: .ifdef CLAMD warn set acl_m0 = no + warn condition = ${if exists {/etc/exim4/domains/$domain/antivirus}{yes}{no}} set acl_m0 = yes .endif + .ifdef SPAMASSASSIN warn set acl_m1 = no + warn condition = ${if exists {/etc/exim4/domains/$domain/antispam}{yes}{no}} set acl_m1 = yes .endif + accept acl_check_data: .ifdef CLAMD - deny message = Message contains a virus ($malware_name) and has been rejected + deny message = Message contains a virus ($malware_name) and has been rejected malware = * condition = ${if eq{$acl_m0}{yes}{yes}{no}} .endif .ifdef SPAMASSASSIN - warn - !authenticated = * + warn !authenticated = * hosts = !+relay_from_hosts condition = ${if < {$message_size}{100K}} condition = ${if eq{$acl_m1}{yes}{yes}{no}} @@ -142,23 +148,29 @@ acl_check_data: add_header = X-Spam-Bar: $spam_bar add_header = X-Spam-Report: $spam_report set acl_m2 = $spam_score_int - warn - condition = ${if !eq{$acl_m2}{} {yes}{no}} + + warn condition = ${if !eq{$acl_m2}{} {yes}{no}} condition = ${if >{$acl_m2}{SPAM_SCORE} {yes}{no}} add_header = X-Spam-Status: Yes message = SpamAssassin detected spam (from $sender_address to $recipients). .endif + accept acl_check_mime: - deny message = Blacklisted file extension detected - condition = ${if match {${lc:$mime_filename}}{\N(\.ade|\.adp|\.bat|\.chm|\.cmd|\.com|\.cpl|\.exe|\.hta|\.ins|\.isp|\.jse|\.lib|\.lnk|\.mde|\.msc|\.msp|\.mst|\.pif|\.scr|\.sct|\.shb|\.sys|\.vb|\.vbe|\.vbs|\.vxd|\.wsc|\.wsf|\.wsh)$\N}{1}{0}} + deny message = Blacklisted file extension detected + condition = ${if match {${lc:$mime_filename}}{\N(\.ade|\.adp|\.bat|\.chm|\.cmd|\.com|\.cpl|\.exe|\.hta|\.ins|\.isp|\.jse|\.lib|\.lnk|\.mde|\.msc|\.msp|\.mst|\.pif|\.scr|\.sct|\.shb|\.sys|\.vb|\.vbe|\.vbs|\.vxd|\.wsc|\.wsf|\.wsh)$\N}{1}{0}} + accept -########################################################################## + + +###################################################################### +# AUTHENTICATION CONFIGURATION # +###################################################################### begin authenticators -########################################################################## + dovecot_plain: driver = dovecot public_name = PLAIN @@ -171,9 +183,14 @@ dovecot_login: server_socket = /var/run/dovecot/auth-client server_set_id = $auth1 -########################################################################## + + +###################################################################### +# ROUTERS CONFIGURATION # +# Specifies how addresses are handled # +###################################################################### begin routers -########################################################################## + #smarthost: # driver = manualroute # domains = ! +local_domains @@ -253,9 +270,12 @@ terminate_alias: condition = ${lookup{$local_part@$domain}lsearch{/etc/exim4/domains/$domain/aliases}{true}{false}} -########################################################################## + +###################################################################### +# TRANSPORTS CONFIGURATION # +###################################################################### begin transports -########################################################################## + remote_smtp: driver = smtp #helo_data = $sender_address_domain @@ -265,7 +285,6 @@ remote_smtp: dkim_canon = relaxed dkim_strict = 0 - procmail: driver = pipe command = "/usr/bin/procmail -d $local_part" @@ -306,7 +325,7 @@ local_spam_delivery: delivery_date_add envelope_to_add return_path_add - directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}/mail/$domain/$local_part/.spam" + directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}/mail/$domain/$local_part/.Spam" quota = ${extract{6}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}M quota_directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}/mail/$domain/$local_part" quota_warn_threshold = 75% @@ -335,8 +354,24 @@ devnull: driver = appendfile file = /dev/null -########################################################################## + + +###################################################################### +# RETRY CONFIGURATION # +###################################################################### begin retry + +# Address or Domain Error Retries +# ----------------- ----- ------- * * F,2h,15m; G,16h,1h,1.5; F,4d,6h -########################################################################## + + + +###################################################################### +# REWRITE CONFIGURATION # +###################################################################### begin rewrite + + + +###################################################################### diff --git a/install/vst-install-debian.sh b/install/vst-install-debian.sh index e457c3cd5..6ea63ad8d 100644 --- a/install/vst-install-debian.sh +++ b/install/vst-install-debian.sh @@ -10,12 +10,13 @@ export DEBIAN_FRONTEND=noninteractive RHOST='apt.vestacp.com' CHOST='c.vestacp.com' VERSION='0.9.8/debian' -software="nginx apache2 apache2-utils apache2.2-common apache2-suexec-custom - libapache2-mod-ruid2 libapache2-mod-rpaf libapache2-mod-fcgid bind9 idn - mysql-server mysql-common mysql-client php5-common php5-cgi php5-mysql - php5-curl libapache2-mod-php5 vsftpd mc exim4 exim4-daemon-heavy - clamav-daemon flex dovecot-imapd dovecot-pop3d phpMyAdmin awstats - webalizer jwhois rssh git spamassassin roundcube roundcube-mysql +software="nginx apache2 apache2-utils apache2.2-common bsdutils + apache2-suexec-custom libapache2-mod-ruid2 libapache2-mod-rpaf + libapache2-mod-fcgid bind9 idn mysql-server mysql-common + mysql-client php5-common php5-cgi php5-mysql php5-curl + libapache2-mod-php5 vsftpd mc exim4 exim4-daemon-heavy clamav-daemon + flex dovecot-imapd dovecot-pop3d phpMyAdmin awstats webalizer + jwhois rssh git spamassassin roundcube roundcube-mysql roundcube-plugins sudo bc ftp lsof ntpdate rrdtool quota e2fslibs dnsutils vesta vesta-nginx vesta-php" @@ -24,7 +25,7 @@ help() { -e, --email Set email address -f, --force Force installation -h, --help Print this help and exit - -n, --noupdate Do not run yum update command + -n, --noupdate Do not run apt-get upgrade command -m, --mysql-password Set MySQL password instead of generating it -p, --password Set admin password instead of generating it -s, --hostname Set server hostname @@ -72,7 +73,7 @@ while getopts "dhfnqe:m:p:s:" Option; do h) help ;; # Help e) email=$OPTARG ;; # Set email f) force='yes' ;; # Force install - n) noupdate='yes' ;; # Disable yum update + n) noupdate='yes' ;; # Disable apt-get upgrade m) mpass=$OPTARG ;; # MySQL pasword p) vpass=$OPTARG ;; # Admin password s) servername=$OPTARG ;; # Server hostname @@ -89,7 +90,7 @@ fi # Check supported version if [ -e '/etc/redhat-release' ] || [ -e '/etc/lsb-release' ]; then - echo 'Error: sorry, this installer can work only on Debian 7' + echo 'Error: sorry, this installer works only on Debian 7' exit 1 fi @@ -233,9 +234,6 @@ if [ -z $email ]; then if [ -z "$servername" ]; then read -p "Please enter hostname [$(hostname)]: " servername fi - if [ -z "$servername" ]; then - servername=$(hostname) - fi fi # Validate email @@ -464,6 +462,9 @@ if [ "$srv_type" = 'micro' ] || [ "$srv_type" = 'small' ]; then fi # Set server hostname +if [ -z "$servername" ]; then + servername=$(hostname) +fi /usr/local/vesta/bin/v-change-sys-hostname $servername 2>/dev/null # Templates @@ -499,7 +500,7 @@ chown root:mail /usr/local/vesta/ssl/* chmod 660 /usr/local/vesta/ssl/* rm /tmp/vst.pem -# Enable password auth +# Enable SSH password auth sed -i "s/rdAuthentication no/rdAuthentication yes/g" /etc/ssh/sshd_config service ssh restart @@ -554,9 +555,9 @@ wget $CHOST/$VERSION/apache2-status.conf \ wget $CHOST/$VERSION/apache2.log -O /etc/logrotate.d/apache2 rm -f /etc/apache2/conf.d/vesta.conf echo > /etc/apache2/conf.d/vesta.conf -echo "# Powever by vesta" > /etc/apache2/sites-available/default -echo "# Powever by vestas" > /etc/apache2/sites-available/default-ssl -echo "# Powever by vestas" > /etc/apache2/ports.conf +echo "# Powered by vesta" > /etc/apache2/sites-available/default +echo "# Powered by vesta" > /etc/apache2/sites-available/default-ssl +echo "# Powered by vesta" > /etc/apache2/ports.conf touch /var/log/apache2/access.log touch /var/log/apache2/error.log mkdir -p /var/log/apache2/domains @@ -627,9 +628,9 @@ fi # Exim wget $CHOST/$VERSION/exim4.conf.template -O /etc/exim4/exim4.conf.template -if [ "$srv_type" = 'micro' ] || [ "$srv_type" = 'small' ]; then - sed -i "s/^SPAMASSASSIN/#SPAMASSASSIN/g" /etc/exim4/exim4.conf.template - sed -i "s/^CLAMD/#CLAMD/g" /etc/exim4/exim4.conf.template +if [ "$srv_type" != 'micro' ] && [ "$srv_type" != 'small' ]; then + sed -i "s/#SPAM/SPAM/g" /etc/exim4/exim4.conf.template + sed -i "s/#CLAMD/CLAMD/g" /etc/exim4/exim4.conf.template fi wget $CHOST/$VERSION/dnsbl.conf -O /etc/exim4/dnsbl.conf wget $CHOST/$VERSION/spam-blocks.conf -O /etc/exim4/spam-blocks.conf @@ -665,12 +666,6 @@ tar -xzf dovecot-conf.d.tar.gz rm -f dovecot-conf.d.tar.gz chown -R root:root /etc/dovecot gpasswd -a dovecot mail -if [ "$codename" = 'precise' ]; then - dovecot_ssl_conf="/etc/dovecot/conf.d/10-ssl.conf" - echo "ssl = yes" > $dovecot_ssl_conf - echo "ssl_cert = > $dovecot_ssl_conf - echo "ssl_key = > $dovecot_ssl_conf -fi update-rc.d dovecot defaults service dovecot stop > /dev/null 2>&1 service dovecot start @@ -715,6 +710,7 @@ wget $CHOST/$VERSION/apache2-pma.conf -O /etc/phpmyadmin/apache.conf wget $CHOST/$VERSION/pma.conf -O /etc/phpmyadmin/config.inc.php ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf.d/phpmyadmin.conf mv -f /etc/phpmyadmin/config-db.php /etc/phpmyadmin/config-db.php_ +chmod 777 /var/lib/phpmyadmin/tmp # Roundcube configuration wget $CHOST/$VERSION/apache2-webmail.conf -O /etc/roundcube/apache.conf @@ -733,7 +729,7 @@ mysql roundcube < /usr/share/dbconfig-common/data/roundcube/install/mysql mkdir -p /var/log/roundcube/error chmod -R 777 /var/log/roundcube -# Adding admin user +# Deleting old admin user account if exists if [ ! -z "$(grep ^admin: /etc/passwd)" ] && [ "$force" = 'yes' ]; then chattr -i /home/admin/conf > /dev/null 2>&1 userdel -f admin @@ -750,7 +746,7 @@ if [ -z "$vpass" ]; then vpass=$(gen_pass) fi -# Adding vesta account +# Adding admin account $VESTA/bin/v-add-user admin $vpass $email default System Administrator if [ $? -ne 0 ]; then echo "Error: can't create admin user" @@ -789,7 +785,7 @@ $VESTA/bin/v-add-dns-domain admin default.domain $vst_ip # Add default mail domain $VESTA/bin/v-add-mail-domain admin default.domain -# Configuring crond +# Configuring cron jobs command='sudo /usr/local/vesta/bin/v-update-sys-queue disk' $VESTA/bin/v-add-cron-job 'admin' '15' '02' '*' '*' '*' "$command" command='sudo /usr/local/vesta/bin/v-update-sys-queue traffic' @@ -805,7 +801,7 @@ $VESTA/bin/v-add-cron-job 'admin' '20' '00' '*' '*' '*' "$command" command='sudo /usr/local/vesta/bin/v-update-sys-rrd' $VESTA/bin/v-add-cron-job 'admin' '*/5' '*' '*' '*' '*' "$command" -# Build inititall rrd images +# Building inititall rrd images $VESTA/bin/v-update-sys-rrd # Enable file system quota diff --git a/install/vst-install-rhel.sh b/install/vst-install-rhel.sh index 54ef51747..5ddfaf4bd 100644 --- a/install/vst-install-rhel.sh +++ b/install/vst-install-rhel.sh @@ -233,9 +233,6 @@ if [ -z $email ]; then if [ -z "$servername" ]; then read -p "Please enter hostname [$(hostname)]: " servername fi - if [ -z "$servername" ]; then - servername=$(hostname) - fi fi # Validate email @@ -524,6 +521,9 @@ if [ "$srv_type" = 'micro' ] || [ "$srv_type" = 'small' ]; then fi # Set server hostname +if [ -z "$servername" ]; then + servername=$(hostname) +fi /usr/local/vesta/bin/v-change-sys-hostname $servername 2>/dev/null # Templates @@ -683,9 +683,9 @@ fi # Exim wget $CHOST/$VERSION/exim.conf -O /etc/exim/exim.conf -if [ "$srv_type" = 'micro' ] || [ "$srv_type" = 'small' ]; then - sed -i "s/^SPAMASSASSIN/#SPAMASSASSIN/g" /etc/exim/exim.conf - sed -i "s/^CLAMD/#CLAMD/g" /etc/exim/exim.conf +if [ "$srv_type" != 'micro' ] && [ "$srv_type" != 'small' ]; then + sed -i "s/#SPAM/SPAM/g" /etc/exim/exim.conf + sed -i "s/#CLAMD/CLAMD/g" /etc/exim/exim.conf fi wget $CHOST/$VERSION/dnsbl.conf -O /etc/exim/dnsbl.conf wget $CHOST/$VERSION/spam-blocks.conf -O /etc/exim/spam-blocks.conf diff --git a/install/vst-install-ubuntu.sh b/install/vst-install-ubuntu.sh index b4e718585..b72ab369d 100644 --- a/install/vst-install-ubuntu.sh +++ b/install/vst-install-ubuntu.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Vesta Ubuntu installer v.01 +# Vesta Ubuntu installer v.04 #----------------------------------------------------------# # Variables&Functions # @@ -10,21 +10,25 @@ export DEBIAN_FRONTEND=noninteractive RHOST='apt.vestacp.com' CHOST='c.vestacp.com' VERSION='0.9.8/ubuntu' -software="nginx apache2 apache2-utils apache2-suexec-custom +software="nginx apache2 apache2-utils apache2-suexec-custom bsdutils libapache2-mod-ruid2 libapache2-mod-rpaf libapache2-mod-fcgid bind9 idn mysql-server mysql-common mysql-client php5-common php5-cgi php5-mysql php5-curl libapache2-mod-php5 vsftpd mc exim4 exim4-daemon-heavy - clamav-daemon flex dovecot-imapd dovecot-pop3d phpMyAdmin awstats - webalizer jwhois rssh git spamassassin roundcube roundcube-mysql + clamav-daemon flex dovecot-imapd dovecot-pop3d phpMyAdmin awstats e2fslibs + webalizer jwhois rssh git spamassassin roundcube roundcube-mysql quota roundcube-plugins apparmor-utils sudo bc ftp lsof ntpdate rrdtool dnsutils vesta vesta-nginx vesta-php" help() { echo "usage: $0 [OPTIONS] - -e, --email Define email address - -h, --help Print this help and exit + -e, --email Set email address -f, --force Force installation - -n, --noupdate Do not run apt-get upgrade command" + -h, --help Print this help and exit + -n, --noupdate Do not run apt-get upgrade command + -m, --mysql-password Set MySQL password instead of generating it + -p, --password Set admin password instead of generating it + -s, --hostname Set server hostname + -q, --quota Enable File System Quota" exit 1 } @@ -48,10 +52,14 @@ gen_pass() { for arg; do delim="" case "$arg" in - --help) args="${args}-h " ;; - --force) args="${args}-f " ;; - --email) args="${args}-e " ;; - --noupdate) args="${args}-n " ;; + --email) args="${args}-e " ;; + --force) args="${args}-f " ;; + --help) args="${args}-h " ;; + --noupdate) args="${args}-n " ;; + --mysql-password) args="${args}-m " ;; + --password) args="${args}-p " ;; + --hostname) args="${args}-s " ;; + --quota) args="${args}-q " ;; *) [[ "${arg:0:1}" == "-" ]] || delim="\"" args="${args}${delim}${arg}${delim} ";; esac @@ -59,12 +67,16 @@ done eval set -- "$args" # Getopt -while getopts "dhfne:" Option; do +while getopts "dhfnqe:m:p:s:" Option; do case $Option in h) help ;; # Help e) email=$OPTARG ;; # Set email - f) force='yes' ;; # Force apt-get install + f) force='yes' ;; # Force install n) noupdate='yes' ;; # Disable apt-get upgrade + m) mpass=$OPTARG ;; # MySQL pasword + p) vpass=$OPTARG ;; # Admin password + s) servername=$OPTARG ;; # Server hostname + q) quota='yes' ;; # Enable quota *) help ;; # Default esac done @@ -77,7 +89,7 @@ fi # Check supported version if [ -e '/etc/redhat-release' ]; then - echo 'Error: sorry, this installer can work only on Debian or Ubuntu' + echo 'Error: sorry, this installer works only on Ubuntu' exit 1 fi @@ -89,9 +101,9 @@ else fi os=$(head -n 1 /etc/issue | cut -f 1 -d ' ') release=$(head -n 1 /etc/issue | cut -f 2 -d ' ' ) -codename=$(lsb_release -cs | grep "[precise|raring|saucy]") +codename=$(lsb_release -cs | egrep "precise|quantal|raring|saucy|trusty") if [ -z "$codename" ]; then - echo 'Error: only Ubuntu 12.04, 13.04 and 13.10 is supported' + echo "Error: Ubuntu $(lsb_release -r|awk '{print $2}') is not supported" exit 1 fi @@ -214,6 +226,11 @@ if [ -z $email ]; then # Check email read -p 'Please enter valid email address: ' email + + # Define server hostname + if [ -z "$servername" ]; then + read -p "Please enter hostname [$(hostname)]: " servername + fi fi # Validate email @@ -252,9 +269,6 @@ apt=/etc/apt/sources.list.d echo "deb http://nginx.org/packages/ubuntu/ $codename nginx" > $apt/nginx.list wget http://nginx.org/keys/nginx_signing.key -O /tmp/nginx_signing.key apt-key add /tmp/nginx_signing.key -if [ $codename = 'trusty' ]; then - sed -i "s/trusty/saucy/g" $apt/nginx.list -fi # Install vesta repo echo "deb http://$RHOST/$codename/ $codename vesta" > $apt/vesta.list @@ -400,7 +414,99 @@ rm -f /usr/sbin/policy-rc.d # Set writable permission on tmp directory chmod 777 /tmp -# Enable password auth +# Vesta configuration +echo "export VESTA='/usr/local/vesta'" > /etc/profile.d/vesta.sh +chmod 755 /etc/profile.d/vesta.sh +source /etc/profile.d/vesta.sh +echo 'PATH=$PATH:/usr/local/vesta/bin' >> /root/.bash_profile +echo 'export PATH' >> /root/.bash_profile +source /root/.bash_profile +wget $CHOST/$VERSION/vesta.log -O /etc/logrotate.d/vesta + +# Directory tree +mkdir -p $VESTA/conf +mkdir -p $VESTA/log +mkdir -p $VESTA/ssl +mkdir -p $VESTA/data +mkdir -p $VESTA/data/ips +mkdir -p $VESTA/data/queue +mkdir -p $VESTA/data/users +touch $VESTA/data/queue/backup.pipe +touch $VESTA/data/queue/disk.pipe +touch $VESTA/data/queue/webstats.pipe +touch $VESTA/data/queue/restart.pipe +touch $VESTA/data/queue/traffic.pipe +chmod 750 $VESTA/conf +chmod 750 $VESTA/data/users +chmod 750 $VESTA/data/ips +chmod -R 750 $VESTA/data/queue +ln -s /usr/local/vesta/log /var/log/vesta +touch /var/log/vesta/system.log +touch /var/log/vesta/nginx-error.log +touch /var/log/vesta/auth.log +chmod 660 /var/log/vesta/* +adduser backup > /dev/null 2>&1 +mkdir -p /home/backup +chown backup:backup /home/backup +ln -s /home/backup /backup +chmod a+x /backup + +# vesta.conf +wget $CHOST/$VERSION/vesta.conf -O $VESTA/conf/vesta.conf +if [ "$srv_type" = 'micro' ] || [ "$srv_type" = 'small' ]; then + sed -i "s/clamav-daemon//g" $VESTA/conf/vesta.conf + sed -i "s/spamassassin//g" $VESTA/conf/vesta.conf +fi + +# Set server hostname +if [ -z "$servername" ]; then + servername=$(hostname) +fi +/usr/local/vesta/bin/v-change-sys-hostname $servername 2>/dev/null + +# Templates +cd /usr/local/vesta/data +wget $CHOST/$VERSION/packages.tar.gz -O packages.tar.gz +tar -xzf packages.tar.gz +rm -f packages.tar.gz +cd /usr/local/vesta/data +wget $CHOST/$VERSION/templates.tar.gz -O templates.tar.gz +tar -xzf templates.tar.gz +rm -f templates.tar.gz +if [ "$codename" = 'saucy' ] || [ "$codename" = 'trusty' ]; then + sed -i "s/Include /IncludeOptional /g" \ + $VESTA/data/templates/web/apache2/*tpl +fi +chmod -R 755 /usr/local/vesta/data/templates +cp templates/web/skel/public_html/index.html /var/www/ +sed -i 's/%domain%/It worked!/g' /var/www/index.html +if [ "$srv_type" = 'micro' ]; then + rm -f /usr/local/vesta/data/templates/web/apache2/phpfcgid.* +fi + +# Removing CGI templates +if [ "$codename" = 'trusty' ]; then + rm -f /usr/local/vesta/data/templates/web/apache2/phpcgi.* +fi + +# Generating SSL certificate +$VESTA/bin/v-generate-ssl-cert $(hostname) $email 'US' 'California' \ + 'San Francisco' 'Vesta Control Panel' 'IT' > /tmp/vst.pem + +# Parsing merged certificate file +crt_end=$(grep -n "END CERTIFICATE-" /tmp/vst.pem |cut -f 1 -d:) +key_start=$(grep -n "BEGIN RSA" /tmp/vst.pem |cut -f 1 -d:) +key_end=$(grep -n "END RSA" /tmp/vst.pem |cut -f 1 -d:) + +# Adding SSL certificate +cd /usr/local/vesta/ssl +sed -n "1,${crt_end}p" /tmp/vst.pem > certificate.crt +sed -n "$key_start,${key_end}p" /tmp/vst.pem > certificate.key +chown root:mail /usr/local/vesta/ssl/* +chmod 660 /usr/local/vesta/ssl/* +rm /tmp/vst.pem + +# Enable SSH password auth sed -i "s/rdAuthentication no/rdAuthentication yes/g" /etc/ssh/sshd_config service ssh restart @@ -456,9 +562,9 @@ fi wget $CHOST/$VERSION/apache2-status.conf \ -O /etc/apache2/mods-enabled/status.conf wget $CHOST/$VERSION/apache2.log -O /etc/logrotate.d/apache2 -echo "# Powever by vesta" > /etc/apache2/sites-available/default -echo "# Powever by vesta" > /etc/apache2/sites-available/default-ssl -echo "# Powever by vesta" > /etc/apache2/ports.conf +echo "# Powered by vesta" > /etc/apache2/sites-available/default +echo "# Powered by vesta" > /etc/apache2/sites-available/default-ssl +echo "# Powered by vesta" > /etc/apache2/ports.conf mkdir -p /etc/apache2/conf.d rm -f /etc/apache2/conf.d/vesta.conf echo > /etc/apache2/conf.d/vesta.conf @@ -491,11 +597,18 @@ if [ "$?" -ne 0 ]; then exit 1 fi +# Generating MySQL password if it wasn't set +if [ -z "$mpass" ]; then + mpass=$(gen_pass) +fi + # MySQL configuration mpass=$(gen_pass) wget $CHOST/$VERSION/my.cnf -O /etc/mysql/my.cnf mysql_install_db -update-rc.d mysql defaults +if [ "$release" != '14.04' ]; then + update-rc.d mysql defaults +fi service mysql stop > /dev/null 2>&1 service mysql start if [ "$?" -ne 0 ]; then @@ -506,7 +619,7 @@ mysqladmin -u root password $mpass echo -e "[client]\npassword='$mpass'\n" > /root/.my.cnf chmod 600 /root/.my.cnf mysql -e "DELETE FROM mysql.user WHERE User=''" -mysql -e "DROP DATABASE test" +mysql -e "DROP DATABASE test" > /dev/null 2>&1 mysql -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'" mysql -e "DELETE FROM mysql.user WHERE user='' or password='';" mysql -e "FLUSH PRIVILEGES" @@ -526,9 +639,9 @@ fi # Exim wget $CHOST/$VERSION/exim4.conf.template -O /etc/exim4/exim4.conf.template -if [ "$srv_type" = 'micro' ] || [ "$srv_type" = 'small' ]; then - sed -i "s/^SPAMASSASSIN/#SPAMASSASSIN/g" /etc/exim4/exim4.conf.template - sed -i "s/^CLAMD/#CLAMD/g" /etc/exim4/exim4.conf.template +if [ "$srv_type" != 'micro' ] && [ "$srv_type" != 'small' ]; then + sed -i "s/#SPAM/SPAM/g" /etc/exim4/exim4.conf.template + sed -i "s/#CLAMD/CLAMD/g" /etc/exim4/exim4.conf.template fi wget $CHOST/$VERSION/dnsbl.conf -O /etc/exim4/dnsbl.conf wget $CHOST/$VERSION/spam-blocks.conf -O /etc/exim4/spam-blocks.conf @@ -564,12 +677,6 @@ tar -xzf dovecot-conf.d.tar.gz rm -f dovecot-conf.d.tar.gz chown -R root:root /etc/dovecot gpasswd -a dovecot mail -if [ "$codename" = 'precise' ]; then - dovecot_ssl_conf="/etc/dovecot/conf.d/10-ssl.conf" - echo "ssl = yes" > $dovecot_ssl_conf - echo "ssl_cert = > $dovecot_ssl_conf - echo "ssl_key = > $dovecot_ssl_conf -fi update-rc.d dovecot defaults service dovecot stop > /dev/null 2>&1 service dovecot start @@ -630,7 +737,8 @@ wget $CHOST/$VERSION/roundcube-driver.php -O \ wget $CHOST/$VERSION/roundcube-pw.conf -O \ /etc/roundcube/plugins/password/config.inc.php r="$(gen_pass)" -mysql -e "CREATE DATABASE roundcube" +mysql -e "DROP DATABASE roundcube" > /dev/null 2>&1 +mysql -e "CREATE DATABASE roundcube" mysql -e "GRANT ALL ON roundcube.* TO roundcube@localhost IDENTIFIED BY '$r'" sed -i "s/%password%/$r/g" /etc/roundcube/db.inc.php mysql roundcube < /usr/share/dbconfig-common/data/roundcube/install/mysql @@ -643,76 +751,7 @@ fi mkdir -p /var/log/roundcube/error chmod -R 777 /var/log/roundcube -# Vesta configuration -echo "export VESTA='/usr/local/vesta'" > /etc/profile.d/vesta.sh -chmod 755 /etc/profile.d/vesta.sh -source /etc/profile.d/vesta.sh -echo 'PATH=$PATH:/usr/local/vesta/bin' >> /root/.bash_profile -echo 'export PATH' >> /root/.bash_profile -source /root/.bash_profile -wget $CHOST/$VERSION/vesta.log -O /etc/logrotate.d/vesta - -# Directory tree -mkdir -p $VESTA/conf -mkdir -p $VESTA/log -mkdir -p $VESTA/ssl -mkdir -p $VESTA/data -mkdir -p $VESTA/data/ips -mkdir -p $VESTA/data/queue -mkdir -p $VESTA/data/users -touch $VESTA/data/queue/backup.pipe -touch $VESTA/data/queue/disk.pipe -touch $VESTA/data/queue/webstats.pipe -touch $VESTA/data/queue/restart.pipe -touch $VESTA/data/queue/traffic.pipe -chmod 750 $VESTA/conf -chmod 750 $VESTA/data/users -chmod 750 $VESTA/data/ips -chmod -R 750 $VESTA/data/queue -ln -s /usr/local/vesta/log /var/log/vesta -touch /var/log/vesta/system.log -touch /var/log/vesta/nginx-error.log -touch /var/log/vesta/auth.log -chmod 660 /var/log/vesta/* -adduser backup > /dev/null 2>&1 -mkdir -p /home/backup -chown backup:backup /home/backup -ln -s /home/backup /backup -chmod a+x /backup - -# vesta.conf -wget $CHOST/$VERSION/vesta.conf -O $VESTA/conf/vesta.conf -if [ "$srv_type" = 'micro' ] || [ "$srv_type" = 'small' ]; then - sed -i "s/clamav-daemon//g" $VESTA/conf/vesta.conf - sed -i "s/spamassassin//g" $VESTA/conf/vesta.conf -fi - -# Templates -cd /usr/local/vesta/data -wget $CHOST/$VERSION/packages.tar.gz -O packages.tar.gz -tar -xzf packages.tar.gz -rm -f packages.tar.gz -cd /usr/local/vesta/data -wget $CHOST/$VERSION/templates.tar.gz -O templates.tar.gz -tar -xzf templates.tar.gz -rm -f templates.tar.gz -if [ "$codename" = 'saucy' ] || [ "$codename" = 'trusty' ]; then - sed -i "s/Include /IncludeOptional /g" \ - $VESTA/data/templates/web/apache2/*tpl -fi -chmod -R 755 /usr/local/vesta/data/templates -cp templates/web/skel/public_html/index.html /var/www/ -sed -i 's/%domain%/It worked!/g' /var/www/index.html -if [ "$srv_type" = 'micro' ]; then - rm -f /usr/local/vesta/data/templates/web/apache2/phpfcgid.* -fi - -# Default SSL keys -cd /usr/local/vesta/ssl -wget $CHOST/$VERSION/certificate.crt -O certificate.crt -wget $CHOST/$VERSION/certificate.key -O certificate.key - -# Adding admin user +# Deleting old admin user account if exists if [ ! -z "$(grep ^admin: /etc/passwd)" ] && [ "$force" = 'yes' ]; then chattr -i /home/admin/conf > /dev/null 2>&1 userdel -f admin @@ -723,7 +762,13 @@ fi if [ ! -z "$(grep ^admin: /etc/group)" ]; then groupdel admin > /dev/null 2>&1 fi -vpass=$(gen_pass) + +# Generating admin password if it wasn't set +if [ -z "$vpass" ]; then + vpass=$(gen_pass) +fi + +# Adding admin account $VESTA/bin/v-add-user admin $vpass $email default System Administrator if [ $? -ne 0 ]; then echo "Error: can't create admin user" @@ -762,7 +807,7 @@ $VESTA/bin/v-add-dns-domain admin default.domain $vst_ip # Add default mail domain $VESTA/bin/v-add-mail-domain admin default.domain -# Configuring crond +# Configuring cron jobs command='sudo /usr/local/vesta/bin/v-update-sys-queue disk' $VESTA/bin/v-add-cron-job 'admin' '15' '02' '*' '*' '*' "$command" command='sudo /usr/local/vesta/bin/v-update-sys-queue traffic' @@ -778,9 +823,14 @@ $VESTA/bin/v-add-cron-job 'admin' '20' '00' '*' '*' '*' "$command" command='sudo /usr/local/vesta/bin/v-update-sys-rrd' $VESTA/bin/v-add-cron-job 'admin' '*/5' '*' '*' '*' '*' "$command" -# Build inititall rrd images +# Building inititall rrd images $VESTA/bin/v-update-sys-rrd +# Enable file system quota +if [ "$quota" = 'yes' ]; then + $VESTA/bin/v-add-sys-quota +fi + # Start system service update-rc.d vesta defaults service vesta stop > /dev/null 2>&1 diff --git a/src/deb/vesta/control b/src/deb/vesta/control index 62b5b5081..8049a5f57 100644 --- a/src/deb/vesta/control +++ b/src/deb/vesta/control @@ -1,7 +1,7 @@ Source: vesta Package: vesta Priority: optional -Version: 0.9.8-9 +Version: 0.9.8-10 Section: admin Maintainer: Serghey Rodin Homepage: http://vestacp.com diff --git a/src/deb/vesta/postinst b/src/deb/vesta/postinst index 0673f3b6b..7559a345e 100755 --- a/src/deb/vesta/postinst +++ b/src/deb/vesta/postinst @@ -15,4 +15,9 @@ if [ -x "/usr/local/vesta/upd/fix_vesta_ssl_permissions.sh" ]; then /usr/local/vesta/upd/fix_vesta_ssl_permissions.sh fi +# Run MySQL autostart fixed +if [ -x "/usr/local/vesta/upd/fix_mysql_startup.sh" ]; then + /usr/local/vesta/upd/fix_mysql_startup.sh +fi + exit 0 diff --git a/src/rpm/specs/vesta.spec b/src/rpm/specs/vesta.spec index 14dd029d8..db9e18a7e 100644 --- a/src/rpm/specs/vesta.spec +++ b/src/rpm/specs/vesta.spec @@ -1,6 +1,6 @@ Name: vesta Version: 0.9.8 -Release: 9 +Release: 10 Summary: Vesta Control Panel Group: System Environment/Base License: GPL @@ -55,6 +55,36 @@ fi %config(noreplace) %{_vestadir}/web/css/main.css %changelog +* Mon Aug 4 2014 Serghey Rodin - 0.9.8-10 +- New Design +- MultiFTP Support +- Exim Queue Chart +- Arabic Language file. Thanks to Bashar Al-Abdulhadi http://bashar.com +- Italian Language Support. Thanks to Fabio Cagliero http://webnuvola.com +- Finnish Languge Support. Thanks to Juho Räsänen and Onni Hakala https://github.com/RJuho http://koodimonni.fi +- French Language Support. Thanks to nhoway https://github.com/nhoway +- Hungarian Language Support. Thanks to Kovacs Akos http://kovacsakos.info +- Improved SSL CA Validation +- Detailed report on mysql dump error +- Restart Confirmation Dialogue +- Autorefresh Module for Graphs +- Switched service manager from init.d to service command +- Switched free memeory rrd overlay style to linear +- Updated nginx extention list. Thanks to Vasily Kraev https://github.com/vasilykraev +- Updated skel templates. Thanks to Jason Hanes https://github.com/square-orange +- Urlencoder for DNS Cluster API +- Fixed dnsbl+authentication router. Thanks to Mirek Kratochvil http://e-x-a.org/ +- Fix for tar < 1.24 to preserve directory ownership +- Fixed autoupdate script. Thanks to Kijamve +- Fixed some spelling errors. Thanks to Estratos Consulting +- Fixed backup exclusion for cron objects +- Fixed MySQL autostart issue on Ubuntu 14.04 +- Fixed Awstats template parser for Ubuntu 14.04 +- Fixed NameServer validation bug +- Fixed FS-Quota conversion. Thanks to demlasjr https://github.com/demlasjr +- Fixed spelling. Thanks to Jakub Ďuraš https://github.com/jlamer, Kotso https://github.com/kotso, Dustin Dauncey http://www.dustindauncey.com + + * Sun May 18 2014 Serghey Rodin - 0.9.8-9 - File System Quota support - Norwegian translation. Thanks to Helge Sverre diff --git a/upd/fix_mysql_startup.sh b/upd/fix_mysql_startup.sh new file mode 100755 index 000000000..33684f134 --- /dev/null +++ b/upd/fix_mysql_startup.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +# Fix MySQL autostart for Ubuntu 14.04 +if [ -e "/etc/issue" ]; then + release=$(head -n 1 /etc/issue | cut -f 2 -d ' ' ) + if [ "$release" = '14.04' ]; then + update-rc.d mysql disable + fi +fi + +exit diff --git a/web/add/cron/autoupdate/index.php b/web/add/cron/autoupdate/index.php index c3866579d..53d50c059 100644 --- a/web/add/cron/autoupdate/index.php +++ b/web/add/cron/autoupdate/index.php @@ -7,7 +7,7 @@ include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); if ($_SESSION['user'] == 'admin') { exec (VESTA_CMD."v-add-cron-vesta-autoupdate", $output, $return_var); - $_SESSION['error_msg'] = __('Autoupdate has been susscessfully enabled'); + $_SESSION['error_msg'] = __('Autoupdate has been successfully enabled'); unset($output); } diff --git a/web/add/cron/index.php b/web/add/cron/index.php index 047d89b20..d7f1a2ce0 100644 --- a/web/add/cron/index.php +++ b/web/add/cron/index.php @@ -4,32 +4,19 @@ error_reporting(NULL); ob_start(); session_start(); $TAB = 'CRON'; + include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); -// Header -include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); - -// Panel -top_panel($user,$TAB); - +// Check POST request if (!empty($_POST['ok'])) { - // Check input + + // Check empty fields if ((!isset($_POST['v_min'])) || ($_POST['v_min'] == '')) $errors[] = __('minute'); if ((!isset($_POST['v_hour'])) || ($_POST['v_hour'] == '')) $errors[] = __('hour'); if ((!isset($_POST['v_day'])) || ($_POST['v_day'] == '')) $errors[] = __('day'); if ((!isset($_POST['v_month'])) || ($_POST['v_month'] == '')) $errors[] = __('month'); if ((!isset($_POST['v_wday'])) || ($_POST['v_wday'] == '')) $errors[] = __('day of week'); if ((!isset($_POST['v_cmd'])) || ($_POST['v_cmd'] == '')) $errors[] = __('cmd'); - - // Protect input - $v_min = escapeshellarg($_POST['v_min']); - $v_hour = escapeshellarg($_POST['v_hour']); - $v_day = escapeshellarg($_POST['v_day']); - $v_month = escapeshellarg($_POST['v_month']); - $v_wday = escapeshellarg($_POST['v_wday']); - $v_cmd = escapeshellarg($_POST['v_cmd']); - - // Check for errors if (!empty($errors[0])) { foreach ($errors as $i => $error) { if ( $i == 0 ) { @@ -39,32 +26,46 @@ if (!empty($_POST['ok'])) { } } $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); - } else { - // Add Cron Job + } + + // Protect input + $v_min = escapeshellarg($_POST['v_min']); + $v_hour = escapeshellarg($_POST['v_hour']); + $v_day = escapeshellarg($_POST['v_day']); + $v_month = escapeshellarg($_POST['v_month']); + $v_wday = escapeshellarg($_POST['v_wday']); + $v_cmd = escapeshellarg($_POST['v_cmd']); + + // Add cron job + if (empty($_SESSION['error_msg'])) { exec (VESTA_CMD."v-add-cron-job ".$user." ".$v_min." ".$v_hour." ".$v_day." ".$v_month." ".$v_wday." ".$v_cmd, $output, $return_var); - $v_type = $_POST['v_type']; - $v_charset = $_POST['v_charset']; check_return_code($return_var,$output); - unset($v_password); unset($output); - if (empty($_SESSION['error_msg'])) { - $_SESSION['ok_msg'] = __('CRON_CREATED_OK'); - unset($v_min); - unset($v_hour); - unset($v_day); - unset($v_month); - unset($v_wday); - unset($v_cmd); - unset($output); - } + } + + // Flush field values on success + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('CRON_CREATED_OK'); + unset($v_min); + unset($v_hour); + unset($v_day); + unset($v_month); + unset($v_wday); + unset($v_cmd); + unset($output); } } -exec (VESTA_CMD."v-list-database-types 'json'", $output, $return_var); -$db_types = json_decode(implode('', $output), true); -unset($output); +// Header +include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); +// Panel +top_panel($user,$TAB); + +// Display body include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_cron.html'); + +// Flush session messages unset($_SESSION['error_msg']); unset($_SESSION['ok_msg']); diff --git a/web/add/db/index.php b/web/add/db/index.php index f2ba11df1..74725f011 100644 --- a/web/add/db/index.php +++ b/web/add/db/index.php @@ -6,24 +6,16 @@ session_start(); $TAB = 'DB'; include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); -// Header -include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); - -// Panel -top_panel($user,$TAB); - -$v_db_email = $panel[$user]['CONTACT']; - +// Check POST request if (!empty($_POST['ok'])) { - // Check input + + // Check empty fields if (empty($_POST['v_database'])) $errors[] = __('database'); if (empty($_POST['v_dbuser'])) $errors[] = __('username'); if (empty($_POST['v_password'])) $errors[] = __('password'); if (empty($_POST['v_type'])) $errors[] = __('type'); if (empty($_POST['v_host'])) $errors[] = __('host'); if (empty($_POST['v_charset'])) $errors[] = __('charset'); - - // Check for errors if (!empty($errors[0])) { foreach ($errors as $i => $error) { if ( $i == 0 ) { @@ -36,12 +28,18 @@ if (!empty($_POST['ok'])) { } // Validate email - if (!empty($_POST['v_db_email'])) { + if ((!empty($_POST['v_db_email'])) && (empty($_SESSION['error_msg']))) { if (!filter_var($_POST['v_db_email'], FILTER_VALIDATE_EMAIL)) { $_SESSION['error_msg'] = __('Please enter valid email address.'); } } + // Check password length + if (empty($_SESSION['error_msg'])) { + $pw_len = strlen($_POST['v_password']); + if ($pw_len < 6 ) $_SESSION['error_msg'] = __('Password is too short.',$error_msg); + } + // Protect input $v_database = escapeshellarg($_POST['v_database']); $v_dbuser = escapeshellarg($_POST['v_dbuser']); @@ -81,57 +79,71 @@ if (!empty($_POST['ok'])) { if ($pw_len < 6 ) $_SESSION['error_msg'] = __('Password is too short.',$error_msg); } + // Add database if (empty($_SESSION['error_msg'])) { - // Add Database $v_type = escapeshellarg($_POST['v_type']); $v_charset = escapeshellarg($_POST['v_charset']); $v_host = escapeshellarg($_POST['v_host']); exec (VESTA_CMD."v-add-database ".$user." ".$v_database." ".$v_dbuser." ".$v_password." ".$v_type." ".$v_host." ".$v_charset, $output, $return_var); + check_return_code($return_var,$output); + unset($output); $v_type = $_POST['v_type']; $v_host = $_POST['v_host']; $v_charset = $_POST['v_charset']; - check_return_code($return_var,$output); + } + + // Get database manager url + if (empty($_SESSION['error_msg'])) { + exec (VESTA_CMD."v-list-sys-config json", $output, $return_var); + $sys = json_decode(implode('', $output), true); unset($output); - if ((!empty($v_db_email)) && (empty($_SESSION['error_msg']))) { - list($http_host, $port) = explode(':', $_SERVER["HTTP_HOST"]); - if ($_POST['v_type'] == 'mysql') $db_admin_link = "http://".$http_host."/phpmyadmin/"; - if ($_POST['v_type'] == 'pgsql') $db_admin_link = "http://".$http_host."/phppgadmin/"; - $to = $v_db_email; - $subject = __("Database Credentials"); - $hostname = exec('hostname'); - $from = __('MAIL_FROM',$hostname); - $mailtext = __('DATABASE_READY',$user."_".$_POST['v_database'],$user."_".$_POST['v_dbuser'],$_POST['v_password'],$db_admin_link); - send_email($to, $subject, $mailtext, $from); - } - if (empty($_SESSION['error_msg'])) { - exec (VESTA_CMD."v-list-sys-config json", $output, $return_var); - $sys = json_decode(implode('', $output), true); - unset($output); + list($http_host, $port) = explode(':', $_SERVER["HTTP_HOST"] . ":"); + if ($_POST['v_host'] != 'localhost' ) $http_host = $_POST['v_host']; + if ($_POST['v_type'] == 'mysql') $db_admin = "phpMyAdmin"; + if ($_POST['v_type'] == 'mysql') $db_admin_link = "http://".$http_host."/phpmyadmin/"; + if (($_POST['v_type'] == 'mysql') && (!empty($sys['config']['DB_PMA_URL']))) $db_admin_link = $sys['config']['DB_PMA_URL']; + if ($_POST['v_type'] == 'pgsql') $db_admin = "phpPgAdmin"; + if ($_POST['v_type'] == 'pgsql') $db_admin_link = "http://".$http_host."/phppgadmin/"; + if (($_POST['v_type'] == 'pgsql') && (!empty($sys['config']['DB_PGA_URL']))) $db_admin_link = $sys['config']['DB_PGA_URL']; + } - list($http_host, $port) = explode(':', $_SERVER["HTTP_HOST"] . ":"); - if ($_POST['v_host'] != 'localhost' ) $http_host = $_POST['v_host']; - if ($_POST['v_type'] == 'mysql') $db_admin = "phpMyAdmin"; - if ($_POST['v_type'] == 'mysql') $db_admin_link = "http://".$http_host."/phpmyadmin/"; - if (($_POST['v_type'] == 'mysql') && (!empty($sys['config']['DB_PMA_URL']))) $db_admin_link = $sys['config']['DB_PMA_URL']; - if ($_POST['v_type'] == 'pgsql') $db_admin = "phpPgAdmin"; - if ($_POST['v_type'] == 'pgsql') $db_admin_link = "http://".$http_host."/phppgadmin/"; - if (($_POST['v_type'] == 'pgsql') && (!empty($sys['config']['DB_PGA_URL']))) $db_admin_link = $sys['config']['DB_PGA_URL']; + // Email login credentials + if ((!empty($v_db_email)) && (empty($_SESSION['error_msg']))) { + $to = $v_db_email; + $subject = __("Database Credentials"); + $hostname = exec('hostname'); + $from = __('MAIL_FROM',$hostname); + $mailtext = __('DATABASE_READY',$user."_".$_POST['v_database'],$user."_".$_POST['v_dbuser'],$_POST['v_password'],$db_admin_link); + send_email($to, $subject, $mailtext, $from); + } - $_SESSION['ok_msg'] = __('DATABASE_CREATED_OK',$user."_".$_POST['v_database'],$user."_".$_POST['v_database']); - $_SESSION['ok_msg'] .= " / " . __('open %s',$db_admin) . ""; - unset($v_database); - unset($v_dbuser); - unset($v_password); - unset($v_type); - unset($v_charset); - } + // Flush field values on success + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('DATABASE_CREATED_OK',$user."_".$_POST['v_database'],$user."_".$_POST['v_database']); + $_SESSION['ok_msg'] .= " / " . __('open %s',$db_admin) . ""; + unset($v_database); + unset($v_dbuser); + unset($v_password); + unset($v_type); + unset($v_charset); } } +// Header +include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); + +// Panel +top_panel($user,$TAB); + +// Get user email +$v_db_email = $panel[$user]['CONTACT']; + +// List avaiable database types exec (VESTA_CMD."v-list-database-types 'json'", $output, $return_var); $db_types = json_decode(implode('', $output), true); unset($output); +// List available database servers $db_hosts = array(); foreach ($db_types as $db_type ) { exec (VESTA_CMD."v-list-database-hosts ".$db_type." 'json'", $output, $return_var); @@ -141,7 +153,10 @@ foreach ($db_types as $db_type ) { unset($output); } +// Display body include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_db.html'); + +// Flush session messages unset($_SESSION['error_msg']); unset($_SESSION['ok_msg']); diff --git a/web/add/dns/index.php b/web/add/dns/index.php index 8f6ec6c8e..f5a1b8a68 100644 --- a/web/add/dns/index.php +++ b/web/add/dns/index.php @@ -4,31 +4,15 @@ error_reporting(NULL); ob_start(); session_start(); $TAB = 'DNS'; + include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); -// Header -include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); - -// Panel -top_panel($user,$TAB); - +// Check POST request for dns domain if (!empty($_POST['ok'])) { - // Check input + + // Check empty fields if (empty($_POST['v_domain'])) $errors[] = __('domain'); if (empty($_POST['v_ip'])) $errors[] = __('ip'); - - // Protect input - $v_domain = preg_replace("/^www./i", "", $_POST['v_domain']); - $v_domain = escapeshellarg($v_domain); - $v_domain = strtolower($v_domain); - $v_ip = escapeshellarg($_POST['v_ip']); - - if (!empty($_POST['v_ns1'])) $v_ns1 = escapeshellarg($_POST['v_ns1']); - if (!empty($_POST['v_ns2'])) $v_ns2 = escapeshellarg($_POST['v_ns2']); - if (!empty($_POST['v_ns3'])) $v_ns3 = escapeshellarg($_POST['v_ns3']); - if (!empty($_POST['v_ns4'])) $v_ns4 = escapeshellarg($_POST['v_ns4']); - - // Check for errors if (!empty($errors[0])) { foreach ($errors as $i => $error) { if ( $i == 0 ) { @@ -38,49 +22,78 @@ if (!empty($_POST['ok'])) { } } $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); - } else { - // Add DNS + } + + // Protect input + $v_domain = preg_replace("/^www./i", "", $_POST['v_domain']); + $v_domain = escapeshellarg($v_domain); + $v_domain = strtolower($v_domain); + $v_ip = escapeshellarg($_POST['v_ip']); + if (!empty($_POST['v_ns1'])) $v_ns1 = escapeshellarg($_POST['v_ns1']); + if (!empty($_POST['v_ns2'])) $v_ns2 = escapeshellarg($_POST['v_ns2']); + if (!empty($_POST['v_ns3'])) $v_ns3 = escapeshellarg($_POST['v_ns3']); + if (!empty($_POST['v_ns4'])) $v_ns4 = escapeshellarg($_POST['v_ns4']); + + // Add dns domain + if (empty($_SESSION['error_msg'])) { exec (VESTA_CMD."v-add-dns-domain ".$user." ".$v_domain." ".$v_ip." ".$v_ns1." ".$v_ns2." ".$v_ns3." ".$v_ns4." no", $output, $return_var); check_return_code($return_var,$output); unset($output); + } - // Change Expiriation date + // Set expiriation date + if (empty($_SESSION['error_msg'])) { if ((!empty($_POST['v_exp'])) && ($_POST['v_exp'] != date('Y-m-d', strtotime('+1 year')))) { $v_exp = escapeshellarg($_POST['v_exp']); exec (VESTA_CMD."v-change-dns-domain-exp ".$user." ".$v_domain." ".$v_exp." no", $output, $return_var); check_return_code($return_var,$output); unset($output); } + } - // Change TTL + // Set ttl + if (empty($_SESSION['error_msg'])) { if ((!empty($_POST['v_ttl'])) && ($_POST['v_ttl'] != '14400') && (empty($_SESSION['error_msg']))) { $v_ttl = escapeshellarg($_POST['v_ttl']); exec (VESTA_CMD."v-change-dns-domain-ttl ".$user." ".$v_domain." ".$v_ttl." no", $output, $return_var); check_return_code($return_var,$output); unset($output); } + } - if (empty($_SESSION['error_msg'])) { - $_SESSION['ok_msg'] = __('DNS_DOMAIN_CREATED_OK',$_POST[v_domain],$_POST[v_domain]); - unset($v_domain); - } - - if (empty($_SESSION['error_msg'])) { - exec (VESTA_CMD."v-restart-dns", $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } + // Restart dns server + if (empty($_SESSION['error_msg'])) { + exec (VESTA_CMD."v-restart-dns", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + // Flush field values on success + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('DNS_DOMAIN_CREATED_OK',$_POST[v_domain],$_POST[v_domain]); + unset($v_domain); } } -// DNS Record + +// Check POST request for dns record if (!empty($_POST['ok_rec'])) { - // Check input + + // Check empty fields if (empty($_POST['v_domain'])) $errors[] = 'domain'; if (empty($_POST['v_rec'])) $errors[] = 'record'; if (empty($_POST['v_type'])) $errors[] = 'type'; if (empty($_POST['v_val'])) $errors[] = 'value'; + if (!empty($errors[0])) { + foreach ($errors as $i => $error) { + if ( $i == 0 ) { + $error_msg = $error; + } else { + $error_msg = $error_msg.", ".$error; + } + } + $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); + } // Protect input $v_domain = escapeshellarg($_POST['v_domain']); @@ -89,34 +102,36 @@ if (!empty($_POST['ok_rec'])) { $v_val = escapeshellarg($_POST['v_val']); $v_priority = escapeshellarg($_POST['v_priority']); - // Check for errors - if (!empty($errors[0])) { - foreach ($errors as $i => $error) { - if ( $i == 0 ) { - $error_msg = $error; - } else { - $error_msg = $error_msg.", ".$error; - } - } - $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); - } else { - // Add DNS Record + // Add dns record + if (empty($_SESSION['error_msg'])) { exec (VESTA_CMD."v-add-dns-record ".$user." ".$v_domain." ".$v_rec." ".$v_type." ".$v_val." ".$v_priority, $output, $return_var); - $v_type = $_POST['v_type']; check_return_code($return_var,$output); unset($output); - if (empty($_SESSION['error_msg'])) { - $_SESSION['ok_msg'] = __('DNS_RECORD_CREATED_OK',$_POST[v_rec],$_POST[v_domain]); - unset($v_domain); - unset($v_rec); - unset($v_val); - unset($v_priority); - } + $v_type = $_POST['v_type']; + } + + // Flush field values on success + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('DNS_RECORD_CREATED_OK',$_POST[v_rec],$_POST[v_domain]); + unset($v_domain); + unset($v_rec); + unset($v_val); + unset($v_priority); } } -if ((empty($_GET['domain'])) && (empty($_POST['domain']))) { - if ((empty($v_ns1)) && (empty($v_ns2))) { + +// Header +include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); + +// Panel +top_panel($user,$TAB); + +// Display body for dns domain +if (empty($_GET['domain'])) { + if (empty($v_ttl)) $v_ttl = 14400; + if (empty($v_exp)) $v_exp = date('Y-m-d', strtotime('+1 year')); + if (empty($v_ns1)) { exec (VESTA_CMD."v-list-user-ns ".$user." json", $output, $return_var); $nameservers = json_decode(implode('', $output), true); $v_ns1 = $nameservers[0]; @@ -125,17 +140,18 @@ if ((empty($_GET['domain'])) && (empty($_POST['domain']))) { $v_ns4 = $nameservers[3]; unset($output); } - if (empty($v_ttl)) $v_ttl = 14400; - if (empty($v_exp)) $v_exp = date('Y-m-d', strtotime('+1 year')); include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_dns.html'); - unset($_SESSION['error_msg']); - unset($_SESSION['ok_msg']); -} else { +} + +// Display body for dns record +if (!empty($_GET['domain'])) { $v_domain = $_GET['domain']; include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_dns_rec.html'); - unset($_SESSION['error_msg']); - unset($_SESSION['ok_msg']); } +// Flush session messages +unset($_SESSION['error_msg']); +unset($_SESSION['ok_msg']); + // Footer include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); diff --git a/web/add/ip/index.php b/web/add/ip/index.php index 23eeb2434..dfb595ca1 100644 --- a/web/add/ip/index.php +++ b/web/add/ip/index.php @@ -4,80 +4,93 @@ error_reporting(NULL); ob_start(); session_start(); $TAB = 'IP'; + include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); +// Check user +if ($_SESSION['user'] != 'admin') { + header("Location: /list/user"); + exit; +} + +// Check POST request +if (!empty($_POST['ok'])) { + + // Check empty fields + if (empty($_POST['v_ip'])) $errors[] = __('ip address'); + if (empty($_POST['v_netmask'])) $errors[] = __('netmask'); + if (empty($_POST['v_interface'])) $errors[] = __('interface'); + if (empty($_POST['v_owner'])) $errors[] = __('assigned user'); + if (!empty($errors[0])) { + foreach ($errors as $i => $error) { + if ( $i == 0 ) { + $error_msg = $error; + } else { + $error_msg = $error_msg.", ".$error; + } + } + $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); + } + + // Protect input + $v_ip = escapeshellarg($_POST['v_ip']); + $v_netmask = escapeshellarg($_POST['v_netmask']); + $v_name = escapeshellarg($_POST['v_name']); + $v_nat = escapeshellarg($_POST['v_nat']); + $v_interface = escapeshellarg($_POST['v_interface']); + $v_owner = escapeshellarg($_POST['v_owner']); + $v_shared = $_POST['v_shared']; + + // Check shared checkmark + if ($v_shared == 'on') { + $ip_status = 'shared'; + } else { + $ip_status = 'dedicated'; + $v_dedicated = 'yes'; + + } + + // Add IP + if (empty($_SESSION['error_msg'])) { + exec (VESTA_CMD."v-add-sys-ip ".$v_ip." ".$v_netmask." ".$v_interface." ".$v_owner." '".$ip_status."' ".$v_name." ".$v_nat, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + $v_owner = $_POST['v_owner']; + $v_interface = $_POST['v_interface']; + } + + // Flush field values on success + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('IP_CREATED_OK',$_POST['v_ip'],$_POST['v_ip']); + unset($v_ip); + unset($v_netmask); + unset($v_name); + unset($v_nat); + } +} + // Header include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); // Panel top_panel($user,$TAB); -// Are you admin? -if ($_SESSION['user'] == 'admin') { - if (!empty($_POST['ok'])) { - // Check input - if (empty($_POST['v_ip'])) $errors[] = __('ip address'); - if (empty($_POST['v_netmask'])) $errors[] = __('netmask'); - if (empty($_POST['v_interface'])) $errors[] = __('interface'); - if (empty($_POST['v_owner'])) $errors[] = __('assigned user'); +// List network interfaces +exec (VESTA_CMD."v-list-sys-interfaces 'json'", $output, $return_var); +$interfaces = json_decode(implode('', $output), true); +unset($output); - // Protect input - $v_ip = escapeshellarg($_POST['v_ip']); - $v_netmask = escapeshellarg($_POST['v_netmask']); - $v_name = escapeshellarg($_POST['v_name']); - $v_nat = escapeshellarg($_POST['v_nat']); +// List users +exec (VESTA_CMD."v-list-sys-users 'json'", $output, $return_var); +$users = json_decode(implode('', $output), true); +unset($output); - $v_interface = $_POST['v_interface']; - $v_shared = $_POST['v_shared']; - if ($v_shared == 'on') { - $ip_status = 'shared'; - } else { - $ip_status = 'dedicated'; - $v_dedicated = 'yes'; - } +// Display body +include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_ip.html'); - $v_owner = $_POST['v_owner']; - - // Check for errors - if (!empty($errors[0])) { - foreach ($errors as $i => $error) { - if ( $i == 0 ) { - $error_msg = $error; - } else { - $error_msg = $error_msg.", ".$error; - } - } - $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); - } else { - // Add IP - $v_interface = escapeshellarg($_POST['v_interface']); - $v_owner = $_POST['v_owner']; - exec (VESTA_CMD."v-add-sys-ip ".$v_ip." ".$v_netmask." ".$v_interface." ".$v_owner." '".$ip_status."' ".$v_name." ".$v_nat, $output, $return_var); - $v_owner = $_POST['v_owner']; - $v_interface = $_POST['v_interface']; - check_return_code($return_var,$output); - unset($output); - if (empty($_SESSION['error_msg'])) { - $_SESSION['ok_msg'] = __('IP_CREATED_OK',$_POST['v_ip'],$_POST['v_ip']); - unset($v_ip); - unset($v_netmask); - unset($v_name); - unset($v_nat); - } - } - } - exec (VESTA_CMD."v-list-sys-interfaces 'json'", $output, $return_var); - $interfaces = json_decode(implode('', $output), true); - unset($output); - - exec (VESTA_CMD."v-list-sys-users 'json'", $output, $return_var); - $users = json_decode(implode('', $output), true); - unset($output); - - include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_ip.html'); - unset($_SESSION['error_msg']); - unset($_SESSION['ok_msg']); -} +// Flush session messages +unset($_SESSION['error_msg']); +unset($_SESSION['ok_msg']); // Footer include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); diff --git a/web/add/mail/index.php b/web/add/mail/index.php index 492d16739..41c0714d9 100644 --- a/web/add/mail/index.php +++ b/web/add/mail/index.php @@ -4,41 +4,15 @@ error_reporting(NULL); ob_start(); session_start(); $TAB = 'MAIL'; + include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); -// Header -include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); -// Panel -top_panel($user,$TAB); - -// Mail Domain +// Check POST request for mail domain if (!empty($_POST['ok'])) { + + // Check empty fields if (empty($_POST['v_domain'])) $errors[] = __('domain'); - if (!empty($_POST['v_antispam'])) { - $v_antispam = 'yes'; - } else { - $v_antispam = 'no'; - } - - if (!empty($_POST['v_antivirus'])) { - $v_antivirus = 'yes'; - } else { - $v_antivirus = 'no'; - } - - if (!empty($_POST['v_dkim'])) { - $v_dkim = 'yes'; - } else { - $v_dkim = 'no'; - } - - // Protect input - $v_domain = preg_replace("/^www./i", "", $_POST['v_domain']); - $v_domain = escapeshellarg($v_domain); - $v_domain = strtolower($v_domain); - - // Check for errors if (!empty($errors[0])) { foreach ($errors as $i => $error) { if ( $i == 0 ) { @@ -48,27 +22,66 @@ if (!empty($_POST['ok'])) { } } $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); - } else { + } - // Add mail domain + // Check antispam option + if (!empty($_POST['v_antispam'])) { + $v_antispam = 'yes'; + } else { + $v_antispam = 'no'; + } + + // Check antivirus option + if (!empty($_POST['v_antivirus'])) { + $v_antivirus = 'yes'; + } else { + $v_antivirus = 'no'; + } + + // Check dkim option + if (!empty($_POST['v_dkim'])) { + $v_dkim = 'yes'; + } else { + $v_dkim = 'no'; + } + + // Set domain name to lowercase and remove www prefix + $v_domain = preg_replace("/^www./i", "", $_POST['v_domain']); + $v_domain = escapeshellarg($v_domain); + $v_domain = strtolower($v_domain); + + // Add mail domain + if (empty($_SESSION['error_msg'])) { exec (VESTA_CMD."v-add-mail-domain ".$user." ".$v_domain." ".$v_antispam." ".$v_antivirus." ".$v_dkim, $output, $return_var); check_return_code($return_var,$output); unset($output); + } - if (empty($_SESSION['error_msg'])) { - $_SESSION['ok_msg'] = __('MAIL_DOMAIN_CREATED_OK',$_POST['v_domain'],$_POST['v_domain']); - unset($v_domain); - } + // Flush field values on success + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('MAIL_DOMAIN_CREATED_OK',$_POST['v_domain'],$_POST['v_domain']); + unset($v_domain); } } -// Mail Account +// Check POST request for mail account if (!empty($_POST['ok_acc'])) { - // Check input + + // Check empty fields if (empty($_POST['v_domain'])) $errors[] = __('domain'); if (empty($_POST['v_account'])) $errors[] = __('account'); if (empty($_POST['v_password'])) $errors[] = __('password'); + if (!empty($errors[0])) { + foreach ($errors as $i => $error) { + if ( $i == 0 ) { + $error_msg = $error; + } else { + $error_msg = $error_msg.", ".$error; + } + } + $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); + } // Protect input $v_domain = escapeshellarg($_POST['v_domain']); @@ -78,99 +91,100 @@ if (!empty($_POST['ok_acc'])) { $v_quota = escapeshellarg($_POST['v_quota']); $v_aliases = $_POST['v_aliases']; $v_fwd = $_POST['v_fwd']; - if (empty($_POST['v_quota'])) $v_quota = 0; if ((!empty($_POST['v_quota'])) || (!empty($_POST['v_aliases'])) || (!empty($_POST['v_fwd'])) ) $v_adv = 'yes'; - // Check for errors - if (!empty($errors[0])) { - foreach ($errors as $i => $error) { - if ( $i == 0 ) { - $error_msg = $error; - } else { - $error_msg = $error_msg.", ".$error; - } - } - $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); - } else { - // Add Mail Account + // Add Mail Account + if (empty($_SESSION['error_msg'])) { exec (VESTA_CMD."v-add-mail-account ".$user." ".$v_domain." ".$v_account." ".$v_password." ".$v_quota, $output, $return_var); check_return_code($return_var,$output); unset($output); + } - // Add Aliases - if ((!empty($_POST['v_aliases'])) && (empty($_SESSION['error_msg']))) { - $valiases = preg_replace("/\n/", " ", $_POST['v_aliases']); - $valiases = preg_replace("/,/", " ", $valiases); - $valiases = preg_replace('/\s+/', ' ',$valiases); - $valiases = trim($valiases); - $aliases = explode(" ", $valiases); - foreach ($aliases as $alias) { - $alias = escapeshellarg($alias); - if (empty($_SESSION['error_msg'])) { - exec (VESTA_CMD."v-add-mail-account-alias ".$user." ".$v_domain." ".$v_account." ".$alias, $output, $return_var); - check_return_code($return_var,$output); - } - unset($output); - } - } - - // Add Forwads - if ((!empty($_POST['v_fwd'])) && (empty($_SESSION['error_msg']))) { - $vfwd = preg_replace("/\n/", " ", $_POST['v_fwd']); - $vfwd = preg_replace("/,/", " ", $vfwd); - $vfwd = preg_replace('/\s+/', ' ',$vfwd); - $vfwd = trim($vfwd); - $fwd = explode(" ", $vfwd); - foreach ($fwd as $forward) { - $forward = escapeshellarg($forward); - if (empty($_SESSION['error_msg'])) { - exec (VESTA_CMD."v-add-mail-account-forward ".$user." ".$v_domain." ".$v_account." ".$forward, $output, $return_var); - check_return_code($return_var,$output); - } - unset($output); - } - // Add fwd_only flag - if ((!empty($_POST['v_fwd_only'])) && (empty($_SESSION['error_msg']))) { - exec (VESTA_CMD."v-add-mail-account-fwd-only ".$user." ".$v_domain." ".$v_account, $output, $return_var); + // Add Aliases + if ((!empty($_POST['v_aliases'])) && (empty($_SESSION['error_msg']))) { + $valiases = preg_replace("/\n/", " ", $_POST['v_aliases']); + $valiases = preg_replace("/,/", " ", $valiases); + $valiases = preg_replace('/\s+/', ' ',$valiases); + $valiases = trim($valiases); + $aliases = explode(" ", $valiases); + foreach ($aliases as $alias) { + $alias = escapeshellarg($alias); + if (empty($_SESSION['error_msg'])) { + exec (VESTA_CMD."v-add-mail-account-alias ".$user." ".$v_domain." ".$v_account." ".$alias, $output, $return_var); check_return_code($return_var,$output); unset($output); } } + } - if (empty($_SESSION['error_msg'])) { - exec (VESTA_CMD."v-list-sys-config json", $output, $return_var); - $sys = json_decode(implode('', $output), true); - unset($output); - - list($http_host, $port) = explode(':', $_SERVER["HTTP_HOST"].":"); - $webmail = "http://".$http_host."/webmail/"; - if (!empty($sys['config']['MAIL_URL'])) $webmail = $sys['config']['MAIL_URL']; - - $_SESSION['ok_msg'] = __('MAIL_ACCOUNT_CREATED_OK',strtolower($_POST['v_account']),$_POST[v_domain],strtolower($_POST['v_account']),$_POST[v_domain]); - $_SESSION['ok_msg'] .= " / " . __('open webmail') . ""; - unset($v_account); - unset($v_password); - unset($v_password); - unset($v_aliases); - unset($v_fwd); - unset($v_quota); + // Add Forwarders + if ((!empty($_POST['v_fwd'])) && (empty($_SESSION['error_msg']))) { + $vfwd = preg_replace("/\n/", " ", $_POST['v_fwd']); + $vfwd = preg_replace("/,/", " ", $vfwd); + $vfwd = preg_replace('/\s+/', ' ',$vfwd); + $vfwd = trim($vfwd); + $fwd = explode(" ", $vfwd); + foreach ($fwd as $forward) { + $forward = escapeshellarg($forward); + if (empty($_SESSION['error_msg'])) { + exec (VESTA_CMD."v-add-mail-account-forward ".$user." ".$v_domain." ".$v_account." ".$forward, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } } } + + // Add fwd_only flag + if ((!empty($_POST['v_fwd_only'])) && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-add-mail-account-fwd-only ".$user." ".$v_domain." ".$v_account, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Get webmail url + if (empty($_SESSION['error_msg'])) { + exec (VESTA_CMD."v-list-sys-config json", $output, $return_var); + $sys = json_decode(implode('', $output), true); + unset($output); + list($http_host, $port) = explode(':', $_SERVER["HTTP_HOST"].":"); + $webmail = "http://".$http_host."/webmail/"; + if (!empty($sys['config']['MAIL_URL'])) $webmail = $sys['config']['MAIL_URL']; + } + + // Flush field values on success + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('MAIL_ACCOUNT_CREATED_OK',strtolower($_POST['v_account']),$_POST[v_domain],strtolower($_POST['v_account']),$_POST[v_domain]); + $_SESSION['ok_msg'] .= " / " . __('open webmail') . ""; + unset($v_account); + unset($v_password); + unset($v_password); + unset($v_aliases); + unset($v_fwd); + unset($v_quota); + } } +// Header +include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); -if ((empty($_GET['domain'])) && (empty($_POST['domain']))) { - $v_domain = (isset($_GET['domain'])?$_GET['domain']:''); +// Panel +top_panel($user,$TAB); + +// Display body for mail domain +if (empty($_GET['domain'])) { include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_mail.html'); - unset($_SESSION['error_msg']); - unset($_SESSION['ok_msg']); -} else { +} + +// Display body for mail account +if (!empty($_GET['domain'])) { $v_domain = $_GET['domain']; include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_mail_acc.html'); - unset($_SESSION['error_msg']); - unset($_SESSION['ok_msg']); } +// Flush session messages +unset($_SESSION['error_msg']); +unset($_SESSION['ok_msg']); + // Footer include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); diff --git a/web/add/package/index.php b/web/add/package/index.php index 594d3529d..7feb8218b 100644 --- a/web/add/package/index.php +++ b/web/add/package/index.php @@ -4,175 +4,181 @@ error_reporting(NULL); ob_start(); session_start(); $TAB = 'PACKAGE'; + include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); -if (empty($_SESSION['user'])) { - header("Location: /login/"); +// Check user +if ($_SESSION['user'] != 'admin') { + header("Location: /list/user"); + exit; } +// Check POST request +if (!empty($_POST['ok'])) { + + // Check empty fields + if (empty($_POST['v_package'])) $errors[] = __('package'); + if (empty($_POST['v_web_template'])) $errors[] = __('web template'); + if (empty($_POST['v_proxy_template'])) $errors[] = __('proxy template'); + if (empty($_POST['v_dns_template'])) $errors[] = __('dns template'); + if (empty($_POST['v_shell'])) $errrors[] = __('shell'); + if (!isset($_POST['v_web_domains'])) $errors[] = __('web domains'); + if (!isset($_POST['v_web_aliases'])) $errors[] = __('web aliases'); + if (!isset($_POST['v_dns_domains'])) $errors[] = __('dns domains'); + if (!isset($_POST['v_dns_records'])) $errors[] = __('dns records'); + if (!isset($_POST['v_mail_domains'])) $errors[] = __('mail domains'); + if (!isset($_POST['v_mail_accounts'])) $errors[] = __('mail accounts'); + if (!isset($_POST['v_databases'])) $errors[] = __('databases'); + if (!isset($_POST['v_cron_jobs'])) $errors[] = __('cron jobs'); + if (!isset($_POST['v_backups'])) $errors[] = __('backups'); + if (!isset($_POST['v_disk_quota'])) $errors[] = __('quota'); + if (!isset($_POST['v_bandwidth'])) $errors[] = __('bandwidth'); + if (empty($_POST['v_ns1'])) $errors[] = __('ns1'); + if (empty($_POST['v_ns2'])) $errors[] = __('ns2'); + if (!empty($errors[0])) { + foreach ($errors as $i => $error) { + if ( $i == 0 ) { + $error_msg = $error; + } else { + $error_msg = $error_msg.", ".$error; + } + } + $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); + } + + // Protect input + $v_package = escapeshellarg($_POST['v_package']); + $v_web_template = escapeshellarg($_POST['v_web_template']); + $v_proxy_template = escapeshellarg($_POST['v_proxy_template']); + $v_dns_template = escapeshellarg($_POST['v_dns_template']); + $v_shell = escapeshellarg($_POST['v_shell']); + $v_web_domains = escapeshellarg($_POST['v_web_domains']); + $v_web_aliases = escapeshellarg($_POST['v_web_aliases']); + $v_dns_domains = escapeshellarg($_POST['v_dns_domains']); + $v_dns_records = escapeshellarg($_POST['v_dns_records']); + $v_mail_domains = escapeshellarg($_POST['v_mail_domains']); + $v_mail_accounts = escapeshellarg($_POST['v_mail_accounts']); + $v_databases = escapeshellarg($_POST['v_databases']); + $v_cron_jobs = escapeshellarg($_POST['v_cron_jobs']); + $v_backups = escapeshellarg($_POST['v_backups']); + $v_disk_quota = escapeshellarg($_POST['v_disk_quota']); + $v_bandwidth = escapeshellarg($_POST['v_bandwidth']); + $v_ns1 = trim($_POST['v_ns1'], '.'); + $v_ns2 = trim($_POST['v_ns2'], '.'); + $v_ns3 = trim($_POST['v_ns3'], '.'); + $v_ns4 = trim($_POST['v_ns4'], '.'); + $v_ns = $v_ns1.",".$v_ns2; + if (!empty($v_ns3)) $v_ns .= ",".$v_ns3; + if (!empty($v_ns4)) $v_ns .= ",".$v_ns4; + $v_ns = escapeshellarg($v_ns); + $v_time = escapeshellarg(date('H:i:s')); + $v_date = escapeshellarg(date('Y-m-d')); + + // Create temporary dir + if (empty($_SESSION['error_msg'])) { + exec ('mktemp -d', $output, $return_var); + $tmpdir = $output[0]; + check_return_code($return_var,$output); + unset($output); + } + + // Create package file + if (empty($_SESSION['error_msg'])) { + $pkg = "WEB_TEMPLATE=".$v_web_template."\n"; + $pkg .= "PROXY_TEMPLATE=".$v_proxy_template."\n"; + $pkg .= "DNS_TEMPLATE=".$v_dns_template."\n"; + $pkg .= "WEB_DOMAINS=".$v_web_domains."\n"; + $pkg .= "WEB_ALIASES=".$v_web_aliases."\n"; + $pkg .= "DNS_DOMAINS=".$v_dns_domains."\n"; + $pkg .= "DNS_RECORDS=".$v_dns_records."\n"; + $pkg .= "MAIL_DOMAINS=".$v_mail_domains."\n"; + $pkg .= "MAIL_ACCOUNTS=".$v_mail_accounts."\n"; + $pkg .= "DATABASES=".$v_databases."\n"; + $pkg .= "CRON_JOBS=".$v_cron_jobs."\n"; + $pkg .= "DISK_QUOTA=".$v_disk_quota."\n"; + $pkg .= "BANDWIDTH=".$v_bandwidth."\n"; + $pkg .= "NS=".$v_ns."\n"; + $pkg .= "SHELL=".$v_shell."\n"; + $pkg .= "BACKUPS=".$v_backups."\n"; + $pkg .= "TIME=".$v_time."\n"; + $pkg .= "DATE=".$v_date."\n"; + + $fp = fopen($tmpdir."/".$_POST['v_package'].".pkg", 'w'); + fwrite($fp, $pkg); + fclose($fp); + } + + // Add new package + if (empty($_SESSION['error_msg'])) { + exec (VESTA_CMD."v-add-user-package ".$tmpdir." ".$v_package, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Remove tmpdir + exec ('rm -rf '.$tmpdir, $output, $return_var); + unset($output); + + // Flush field values on success + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('PACKAGE_CREATED_OK',$_POST['v_package'],$_POST['v_package']); + unset($v_package); + } + +} + + // Header include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); // Panel top_panel($user,$TAB); -// Are you admin? -if ($_SESSION['user'] == 'admin') { - if (!empty($_POST['ok'])) { - // Check input - if (empty($_POST['v_package'])) $errors[] = __('package'); - if (empty($_POST['v_web_template'])) $errors[] = __('web template'); - if (empty($_POST['v_proxy_template'])) $errors[] = __('proxy template'); - if (empty($_POST['v_dns_template'])) $errors[] = __('dns template'); - if (empty($_POST['v_shell'])) $errrors[] = __('shell'); - if (!isset($_POST['v_web_domains'])) $errors[] = __('web domains'); - if (!isset($_POST['v_web_aliases'])) $errors[] = __('web aliases'); - if (!isset($_POST['v_dns_domains'])) $errors[] = __('dns domains'); - if (!isset($_POST['v_dns_records'])) $errors[] = __('dns records'); - if (!isset($_POST['v_mail_domains'])) $errors[] = __('mail domains'); - if (!isset($_POST['v_mail_accounts'])) $errors[] = __('mail accounts'); - if (!isset($_POST['v_databases'])) $errors[] = __('databases'); - if (!isset($_POST['v_cron_jobs'])) $errors[] = __('cron jobs'); - if (!isset($_POST['v_backups'])) $errors[] = __('backups'); - if (!isset($_POST['v_disk_quota'])) $errors[] = __('quota'); - if (!isset($_POST['v_bandwidth'])) $errors[] = __('bandwidth'); - if (empty($_POST['v_ns1'])) $errors[] = __('ns1'); - if (empty($_POST['v_ns2'])) $errors[] = __('ns2'); +// List web temmplates +exec (VESTA_CMD."v-list-web-templates json", $output, $return_var); +$web_templates = json_decode(implode('', $output), true); +unset($output); +// List web templates for proxy +exec (VESTA_CMD."v-list-web-templates-proxy json", $output, $return_var); +$proxy_templates = json_decode(implode('', $output), true); +unset($output); - // Protect input - $v_package = escapeshellarg($_POST['v_package']); - $v_web_template = escapeshellarg($_POST['v_web_template']); - $v_proxy_template = escapeshellarg($_POST['v_proxy_template']); - $v_dns_template = escapeshellarg($_POST['v_dns_template']); - $v_shell = escapeshellarg($_POST['v_shell']); - $v_web_domains = escapeshellarg($_POST['v_web_domains']); - $v_web_aliases = escapeshellarg($_POST['v_web_aliases']); - $v_dns_domains = escapeshellarg($_POST['v_dns_domains']); - $v_dns_records = escapeshellarg($_POST['v_dns_records']); - $v_mail_domains = escapeshellarg($_POST['v_mail_domains']); - $v_mail_accounts = escapeshellarg($_POST['v_mail_accounts']); - $v_databases = escapeshellarg($_POST['v_databases']); - $v_cron_jobs = escapeshellarg($_POST['v_cron_jobs']); - $v_backups = escapeshellarg($_POST['v_backups']); - $v_disk_quota = escapeshellarg($_POST['v_disk_quota']); - $v_bandwidth = escapeshellarg($_POST['v_bandwidth']); - $v_ns1 = trim($_POST['v_ns1'], '.'); - $v_ns2 = trim($_POST['v_ns2'], '.'); - $v_ns3 = trim($_POST['v_ns3'], '.'); - $v_ns4 = trim($_POST['v_ns4'], '.'); - $v_ns = $v_ns1.",".$v_ns2; - if (!empty($v_ns3)) $v_ns .= ",".$v_ns3; - if (!empty($v_ns4)) $v_ns .= ",".$v_ns4; - $v_ns = escapeshellarg($v_ns); - $v_time = escapeshellarg(date('H:i:s')); - $v_date = escapeshellarg(date('Y-m-d')); +// List DNS templates +exec (VESTA_CMD."v-list-dns-templates json", $output, $return_var); +$dns_templates = json_decode(implode('', $output), true); +unset($output); - // Check for errors - if (!empty($errors[0])) { - foreach ($errors as $i => $error) { - if ( $i == 0 ) { - $error_msg = $error; - } else { - $error_msg = $error_msg.", ".$error; - } - } - $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); - } else { - exec ('mktemp -d', $output, $return_var); - $tmpdir = $output[0]; - unset($output); +// List system shells +exec (VESTA_CMD."v-list-sys-shells json", $output, $return_var); +$shells = json_decode(implode('', $output), true); +unset($output); - // Create package - $pkg = "WEB_TEMPLATE=".$v_web_template."\n"; - $pkg .= "PROXY_TEMPLATE=".$v_proxy_template."\n"; - $pkg .= "DNS_TEMPLATE=".$v_dns_template."\n"; - $pkg .= "WEB_DOMAINS=".$v_web_domains."\n"; - $pkg .= "WEB_ALIASES=".$v_web_aliases."\n"; - $pkg .= "DNS_DOMAINS=".$v_dns_domains."\n"; - $pkg .= "DNS_RECORDS=".$v_dns_records."\n"; - $pkg .= "MAIL_DOMAINS=".$v_mail_domains."\n"; - $pkg .= "MAIL_ACCOUNTS=".$v_mail_accounts."\n"; - $pkg .= "DATABASES=".$v_databases."\n"; - $pkg .= "CRON_JOBS=".$v_cron_jobs."\n"; - $pkg .= "DISK_QUOTA=".$v_disk_quota."\n"; - $pkg .= "BANDWIDTH=".$v_bandwidth."\n"; - $pkg .= "NS=".$v_ns."\n"; - $pkg .= "SHELL=".$v_shell."\n"; - $pkg .= "BACKUPS=".$v_backups."\n"; - $pkg .= "TIME=".$v_time."\n"; - $pkg .= "DATE=".$v_date."\n"; +// Set default values +if (empty($v_web_template)) $v_web_template = 'default'; +if (empty($v_proxy_template)) $v_proxy_template = 'default'; +if (empty($v_dns_template)) $v_dns_template = 'default'; +if (empty($v_shell)) $v_shell = 'nologin'; +if (empty($v_web_domains)) $v_web_domains = "'0'"; +if (empty($v_web_aliases)) $v_web_aliases = "'0'"; +if (empty($v_dns_domains)) $v_dns_domains = "'0'"; +if (empty($v_dns_records)) $v_dns_records = "'0'"; +if (empty($v_mail_domains)) $v_mail_domains = "'0'"; +if (empty($v_mail_accounts)) $v_mail_accounts = "'0'"; +if (empty($v_databases)) $v_databases = "'0'"; +if (empty($v_cron_jobs)) $v_cron_jobs = "'0'"; +if (empty($v_backups)) $v_backups = "'0'"; +if (empty($v_disk_quota)) $v_disk_quota = "'0'"; +if (empty($v_bandwidth)) $v_bandwidth = "'0'"; +if (empty($v_ns1)) $v_ns1 = 'ns1.example.ltd'; +if (empty($v_ns2)) $v_ns2 = 'ns2.example.ltd'; - // Write package - $fp = fopen($tmpdir."/".$_POST['v_package'].".pkg", 'w'); - fwrite($fp, $pkg); - fclose($fp); +// Display body +include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_package.html'); - // Add new package - if (empty($_SESSION['error_msg'])) { - exec (VESTA_CMD."v-add-user-package ".$tmpdir." ".$v_package, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - - // Remove tmpdir - exec ('rm -rf '.$tmpdir, $output, $return_var); - unset($output); - - // Check output - if (empty($_SESSION['error_msg'])) { - $_SESSION['ok_msg'] = __('PACKAGE_CREATED_OK',$_POST['v_package'],$_POST['v_package']); - unset($v_package); - } - - } - } - - - exec (VESTA_CMD."v-list-web-templates json", $output, $return_var); - check_error($return_var); - $web_templates = json_decode(implode('', $output), true); - unset($output); - - exec (VESTA_CMD."v-list-web-templates-proxy json", $output, $return_var); - check_error($return_var); - $proxy_templates = json_decode(implode('', $output), true); - unset($output); - - exec (VESTA_CMD."v-list-dns-templates json", $output, $return_var); - check_error($return_var); - $dns_templates = json_decode(implode('', $output), true); - unset($output); - - exec (VESTA_CMD."v-list-sys-shells json", $output, $return_var); - check_error($return_var); - $shells = json_decode(implode('', $output), true); - unset($output); - - // Set default values - if (empty($v_web_template)) $v_web_template = 'default'; - if (empty($v_proxy_template)) $v_proxy_template = 'default'; - if (empty($v_dns_template)) $v_dns_template = 'default'; - if (empty($v_shell)) $v_shell = 'nologin'; - if (empty($v_web_domains)) $v_web_domains = "'0'"; - if (empty($v_web_aliases)) $v_web_aliases = "'0'"; - if (empty($v_dns_domains)) $v_dns_domains = "'0'"; - if (empty($v_dns_records)) $v_dns_records = "'0'"; - if (empty($v_mail_domains)) $v_mail_domains = "'0'"; - if (empty($v_mail_accounts)) $v_mail_accounts = "'0'"; - if (empty($v_databases)) $v_databases = "'0'"; - if (empty($v_cron_jobs)) $v_cron_jobs = "'0'"; - if (empty($v_backups)) $v_backups = "'0'"; - if (empty($v_disk_quota)) $v_disk_quota = "'0'"; - if (empty($v_bandwidth)) $v_bandwidth = "'0'"; - if (empty($v_ns1)) $v_ns1 = 'ns1.example.ltd'; - if (empty($v_ns2)) $v_ns2 = 'ns2.example.ltd'; - - - include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_package.html'); - unset($_SESSION['error_msg']); - unset($_SESSION['ok_msg']); -} +// Flush session messages +unset($_SESSION['error_msg']); +unset($_SESSION['ok_msg']); // Footer include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); diff --git a/web/add/user/index.php b/web/add/user/index.php index 5881d24fb..aa7bd3145 100644 --- a/web/add/user/index.php +++ b/web/add/user/index.php @@ -1,124 +1,148 @@ $error) { + if ( $i == 0 ) { + $error_msg = $error; + } else { + $error_msg = $error_msg.", ".$error; + } + } + $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); + } + + // Check username length + if (empty($_SESSION['error_msg'])) { + $username_len = strlen($_POST['v_username']); + exec (VESTA_CMD."v-list-database-types", $output, $return_var); + check_error($return_var); + if (strpos($output, "mysql") !== false) + $username_maxlen = 16 - 2; + elseif (strpos($output, "postgresql") !== false) + $username_maxlen = 63 - 2; + else + $username_maxlen = true; // Allow any length by default + if ($username_len > $username_maxlen ) $_SESSION['error_msg'] = __('Username is too long.',$error_msg); + } + + // Check password length + if (empty($_SESSION['error_msg'])) { + $pw_len = strlen($_POST['v_password']); + if ($pw_len < 6 ) $_SESSION['error_msg'] = __('Password is too short.',$error_msg); + } + + // Validate email + if ((empty($_SESSION['error_msg'])) && (!filter_var($_POST['v_email'], FILTER_VALIDATE_EMAIL))) { + $_SESSION['error_msg'] = __('Please enter valid email address.'); + } + + // Check password length + if (empty($_SESSION['error_msg'])) { + $pw_len = strlen($_POST['v_password']); + if ($pw_len < 6 ) $_SESSION['error_msg'] = __('Password is too short.',$error_msg); + } + + // Protect input + $v_username = escapeshellarg($_POST['v_username']); + $v_password = escapeshellarg($_POST['v_password']); + $v_email = escapeshellarg($_POST['v_email']); + $v_package = escapeshellarg($_POST['v_package']); + $v_language = escapeshellarg($_POST['v_language']); + $v_fname = escapeshellarg($_POST['v_fname']); + $v_lname = escapeshellarg($_POST['v_lname']); + $v_notify = $_POST['v_notify']; + + + // Add user + if (empty($_SESSION['error_msg'])) { + exec (VESTA_CMD."v-add-user ".$v_username." ".$v_password." ".$v_email." ".$v_package." ".$v_fname." ".$v_lname, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Set language + if (empty($_SESSION['error_msg'])) { + exec (VESTA_CMD."v-change-user-language ".$v_username." ".$v_language, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Send email to the new user + if ((empty($_SESSION['error_msg'])) && (!empty($v_notify))) { + $to = $_POST['v_notify']; + $subject = _translate($_POST['v_language'],"Welcome to Vesta Control Panel"); + $hostname = exec('hostname'); + unset($output); + $from = _translate($_POST['v_language'],'MAIL_FROM',$hostname); + if (!empty($_POST['v_fname'])) { + $mailtext = _translate($_POST['v_language'],'GREETINGS_GORDON_FREEMAN',$_POST['v_fname'],$_POST['v_lname']); + } else { + $mailtext = _translate($_POST['v_language'],'GREETINGS'); + } + $mailtext .= _translate($_POST['v_language'],'ACCOUNT_READY',$_SERVER['HTTP_HOST'],$_POST['v_username'],$_POST['v_password']); + send_email($to, $subject, $mailtext, $from); + } + + // Flush field values on success + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('USER_CREATED_OK',$_POST['v_username'],$_POST['v_username']); + $_SESSION['ok_msg'] .= " / " . __('login as') ." ".$_POST['v_username']. ""; + unset($v_username); + unset($v_password); + unset($v_email); + unset($v_fname); + unset($v_lname); + unset($v_notify); + } +} + + // Header include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); // Panel top_panel($user,$TAB); -// Are you admin? -if ($_SESSION['user'] == 'admin') { - if (!empty($_POST['ok'])) { - // Check input - if (empty($_POST['v_username'])) $errors[] = __('user'); - if (empty($_POST['v_password'])) $errors[] = __('password'); - if (empty($_POST['v_package'])) $errrors[] = __('package'); - if (empty($_POST['v_email'])) $errors[] = __('email'); - if (empty($_POST['v_fname'])) $errors[] = __('first name'); - if (empty($_POST['v_lname'])) $errors[] = __('last name'); +// List hosting packages +exec (VESTA_CMD."v-list-user-packages json", $output, $return_var); +check_error($return_var); +$data = json_decode(implode('', $output), true); +unset($output); - // Protect input - $v_username = escapeshellarg($_POST['v_username']); - $v_password = escapeshellarg($_POST['v_password']); - $v_email = escapeshellarg($_POST['v_email']); - $v_package = escapeshellarg($_POST['v_package']); - $v_language = escapeshellarg($_POST['v_language']); - $v_fname = escapeshellarg($_POST['v_fname']); - $v_lname = escapeshellarg($_POST['v_lname']); - $v_notify = $_POST['v_notify']; +// List languages +exec (VESTA_CMD."v-list-sys-languages json", $output, $return_var); +$languages = json_decode(implode('', $output), true); +unset($output); - // Validate email - if (!filter_var($_POST['v_email'], FILTER_VALIDATE_EMAIL)) { - $_SESSION['error_msg'] = __('Please enter valid email address.'); - } +// Display body +include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_user.html'); - // Check for errors - if (!empty($errors[0])) { - foreach ($errors as $i => $error) { - if ( $i == 0 ) { - $error_msg = $error; - } else { - $error_msg = $error_msg.", ".$error; - } - } - $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); - } - - // Check username length - if (empty($_SESSION['error_msg'])) { - $username_len = strlen($_POST['v_username']); - exec (VESTA_CMD."v-list-database-types", $output, $return_var); - check_error($return_var); - if (strpos($output, "mysql") !== false) - $username_maxlen = 16 - 2; - elseif (strpos($output, "postgresql") !== false) - $username_maxlen = 63 - 2; - else - $username_maxlen = true; // Allow any length by default - if ($username_len > $username_maxlen ) $_SESSION['error_msg'] = __('Username is too long.',$error_msg); - } - - // Check password length - if (empty($_SESSION['error_msg'])) { - $pw_len = strlen($_POST['v_password']); - if ($pw_len < 6 ) $_SESSION['error_msg'] = __('Password is too short.',$error_msg); - } - - if (empty($_SESSION['error_msg'])) { - exec (VESTA_CMD."v-add-user ".$v_username." ".$v_password." ".$v_email." ".$v_package." ".$v_fname." ".$v_lname, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - if (empty($_SESSION['error_msg'])) { - exec (VESTA_CMD."v-change-user-language ".$v_username." ".$v_language, $output, $return_var); - if (!empty($v_notify)) { - $to = $_POST['v_notify']; - $subject = _translate($_POST['v_language'],"Welcome to Vesta Control Panel"); - $hostname = exec('hostname'); - $from = _translate($_POST['v_language'],'MAIL_FROM',$hostname); - if (!empty($_POST['v_fname'])) { - $mailtext = _translate($_POST['v_language'],'GREETINGS_GORDON_FREEMAN',$_POST['v_fname'],$_POST['v_lname']); - } else { - $mailtext = _translate($_POST['v_language'],'GREETINGS'); - } - $mailtext .= _translate($_POST['v_language'],'ACCOUNT_READY',$_SERVER['HTTP_HOST'],$_POST['v_username'],$_POST['v_password']); - send_email($to, $subject, $mailtext, $from); - } - - $_SESSION['ok_msg'] = __('USER_CREATED_OK',$_POST[v_username],$_POST[v_username]); - $_SESSION['ok_msg'] .= " / " . __('login as') ." ".$_POST[v_username]. ""; - unset($v_username); - unset($v_password); - unset($v_email); - unset($v_fname); - unset($v_lname); - unset($v_notify); - } - unset($output); - } - } - - exec (VESTA_CMD."v-list-user-packages json", $output, $return_var); - check_error($return_var); - $data = json_decode(implode('', $output), true); - unset($output); - - exec (VESTA_CMD."v-list-sys-languages json", $output, $return_var); - $languages = json_decode(implode('', $output), true); - unset($output); - - include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_user.html'); - unset($_SESSION['error_msg']); - unset($_SESSION['ok_msg']); -} +// Flush session messages +unset($_SESSION['error_msg']); +unset($_SESSION['ok_msg']); // Footer include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); diff --git a/web/add/web/index.php b/web/add/web/index.php index 0c13cf58e..63d8d792b 100644 --- a/web/add/web/index.php +++ b/web/add/web/index.php @@ -4,277 +4,350 @@ error_reporting(NULL); ob_start(); session_start(); $TAB = 'WEB'; + include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); +// Check POST request +if (!empty($_POST['ok'])) { + + // Check for empty fields + if (empty($_POST['v_domain'])) $errors[] = __('domain'); + if (empty($_POST['v_ip'])) $errors[] = __('ip'); + if ((!empty($_POST['v_ssl'])) && (empty($_POST['v_ssl_crt']))) $errors[] = __('ssl certificate'); + if ((!empty($_POST['v_ssl'])) && (empty($_POST['v_ssl_key']))) $errors[] = __('ssl key'); + if (!empty($errors[0])) { + foreach ($errors as $i => $error) { + if ( $i == 0 ) { + $error_msg = $error; + } else { + $error_msg = $error_msg.", ".$error; + } + } + $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); + } + + // Check stats password length + if ((!empty($v_stats)) && (empty($_SESSION['error_msg']))) { + if (!empty($_POST['v_stats_user'])) { + $pw_len = strlen($_POST['v_stats_password']); + if ($pw_len < 6 ) $_SESSION['error_msg'] = __('Password is too short.',$error_msg); + } + } + + // Default proxy extention list + $v_proxy_ext = 'jpeg, jpg, png, gif, bmp, ico, svg, tif, tiff, css, js, htm, html, ttf, '; + $v_proxy_ext .= 'otf, webp, woff, txt, csv, rtf, doc, docx, xls, xlsx, ppt, pptx, odf, '; + $v_proxy_ext .= 'odp, ods, odt, pdf, psd, ai, eot, eps, ps, zip, tar, tgz, gz, rar, '; + $v_proxy_ext .= 'bz2, 7z, aac, m4a, mp3, mp4, ogg, wav, wma, 3gp, avi, flv, m4v, mkv, '; + $v_proxy_ext .= 'mov, mp4, mpeg, mpg, wmv, exe, iso, dmg, swf'; + + // Set advanced option checkmark + if (empty($_POST['v_proxy'])) $v_adv = 'yes'; + if (!empty($_POST['v_ftp'])) $v_adv = 'yes'; + if ($_POST['v_proxy_ext'] != $v_proxy_ext) $v_adv = 'yes'; + + // Set domain name to lowercase and remove www prefix + $v_domain = preg_replace("/^www\./i", "", $_POST['v_domain']); + $v_domain = escapeshellarg($v_domain); + $v_domain = strtolower($v_domain); + + // Prepare domain values + $v_ip = escapeshellarg($_POST['v_ip']); + if ((!empty($_POST['v_aliases'])) && ($_POST['v_aliases'] != 'www.'.$_POST['v_domain'])) $v_adv = 'yes'; + if ((!empty($_POST['v_ssl'])) || (!empty($_POST['v_elog']))) $v_adv = 'yes'; + if ((!empty($_POST['v_ssl_crt'])) || (!empty($_POST['v_ssl_key']))) $v_adv = 'yes'; + if ((!empty($_POST['v_ssl_ca'])) || ($_POST['v_stats'] != 'none')) $v_adv = 'yes'; + if (!empty($v_domain)) $v_ftp_user_prepath .= $v_domain; + if (empty($_POST['v_dns'])) $v_dns = 'off'; + if (empty($_POST['v_mail'])) $v_mail = 'off'; + if (empty($_POST['v_proxy'])) $v_proxy = 'off'; + $v_aliases = $_POST['v_aliases']; + $v_elog = $_POST['v_elog']; + $v_ssl = $_POST['v_ssl']; + $v_ssl_crt = $_POST['v_ssl_crt']; + $v_ssl_key = $_POST['v_ssl_key']; + $v_ssl_ca = $_POST['v_ssl_ca']; + $v_ssl_home = $data[$v_domain]['SSL_HOME']; + $v_stats = escapeshellarg($_POST['v_stats']); + $v_stats_user = $data[$v_domain]['STATS_USER']; + $v_stats_password = $data[$v_domain]['STATS_PASSWORD']; + $v_proxy_ext = preg_replace("/\n/", " ", $_POST['v_proxy_ext']); + $v_proxy_ext = preg_replace("/,/", " ", $v_proxy_ext); + $v_proxy_ext = preg_replace('/\s+/', ' ',$v_proxy_ext); + $v_proxy_ext = trim($v_proxy_ext); + $v_proxy_ext = str_replace(' ', ", ", $v_proxy_ext); + $v_ftp = $_POST['v_ftp']; + $v_ftp_user = $_POST['v_ftp_user']; + $v_ftp_password = $_POST['v_ftp_password']; + $v_ftp_email = $_POST['v_ftp_email']; + + + // Add web domain + if (empty($_SESSION['error_msg'])) { + exec (VESTA_CMD."v-add-web-domain ".$user." ".$v_domain." ".$v_ip." 'no'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + $domain_added = empty($_SESSION['error_msg']); + } + + // Add DNS domain + if (($_POST['v_dns'] == 'on') && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-add-dns-domain ".$user." ".$v_domain." ".$v_ip, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Add mail domain + if (($_POST['v_mail'] == 'on') && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-add-mail-domain ".$user." ".$v_domain, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Add domain aliases + if ((!empty($_POST['v_aliases'])) && (empty($_SESSION['error_msg']))) { + $valiases = preg_replace("/\n/", " ", $_POST['v_aliases']); + $valiases = preg_replace("/,/", " ", $valiases); + $valiases = preg_replace('/\s+/', ' ',$valiases); + $valiases = trim($valiases); + $aliases = explode(" ", $valiases); + foreach ($aliases as $alias) { + if ($alias == 'www.'.$_POST['v_domain']) { + $www_alias = 'yes'; + } else { + $alias = escapeshellarg($alias); + if (empty($_SESSION['error_msg'])) { + exec (VESTA_CMD."v-add-web-domain-alias ".$user." ".$v_domain." ".$alias." 'no'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + if (($_POST['v_dns'] == 'on') && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-add-dns-on-web-alias ".$user." ".$v_domain." ".$alias." 'no'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + } + } + } + + // Delete www. alias if it wasn't found + if ((empty($www_alias)) && (empty($_SESSION['error_msg']))) { + $alias = preg_replace("/^www./i", "", $_POST['v_domain']); + $alias = 'www.'.$alias; + $alias = escapeshellarg($alias); + exec (VESTA_CMD."v-delete-web-domain-alias ".$user." ".$v_domain." ".$alias." 'no'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Add proxy support + if (($_POST['v_proxy'] == 'on') && (empty($_SESSION['error_msg']))) { + $ext = str_replace(' ', '', $v_proxy_ext); + $ext = escapeshellarg($ext); + exec (VESTA_CMD."v-add-web-domain-proxy ".$user." ".$v_domain." '' ".$ext." 'no'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Add SSL certificates + if ((!empty($_POST['v_ssl'])) && (empty($_SESSION['error_msg']))) { + exec ('mktemp -d', $output, $return_var); + $tmpdir = $output[0]; + unset($output); + + // Save certificate + if (!empty($_POST['v_ssl_crt'])) { + $fp = fopen($tmpdir."/".$_POST['v_domain'].".crt", 'w'); + fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_crt'])); + fwrite($fp, "\n"); + fclose($fp); + } + + // Save private key + if (!empty($_POST['v_ssl_key'])) { + $fp = fopen($tmpdir."/".$_POST['v_domain'].".key", 'w'); + fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_key'])); + fwrite($fp, "\n"); + fclose($fp); + } + + // Save CA bundle + if (!empty($_POST['v_ssl_ca'])) { + $fp = fopen($tmpdir."/".$_POST['v_domain'].".ca", 'w'); + fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_ca'])); + fwrite($fp, "\n"); + fclose($fp); + } + + $v_ssl_home = escapeshellarg($_POST['v_ssl_home']); + exec (VESTA_CMD."v-add-web-domain-ssl ".$user." ".$v_domain." ".$tmpdir." ".$v_ssl_home." 'no'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Add web stats + if ((!empty($_POST['v_stats'])) && ($_POST['v_stats'] != 'none' ) && (empty($_SESSION['error_msg']))) { + $v_stats = escapeshellarg($_POST['v_stats']); + exec (VESTA_CMD."v-add-web-domain-stats ".$user." ".$v_domain." ".$v_stats, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Add web stats password + if ((!empty($_POST['v_stats_user'])) && (empty($_SESSION['error_msg']))) { + $v_stats_user = escapeshellarg($_POST['v_stats_user']); + $v_stats_password = escapeshellarg($_POST['v_stats_password']); + exec (VESTA_CMD."v-add-web-domain-stats-user ".$user." ".$v_domain." ".$v_stats_user." ".$v_stats_password, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Restart DNS server + if (($_POST['v_dns'] == 'on') && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-restart-dns", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Restart web server + if (empty($_SESSION['error_msg'])) { + exec (VESTA_CMD."v-restart-web", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Restart proxy server + if (($_POST['v_proxy'] == 'on') && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-restart-proxy", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Add FTP + if ((!empty($_POST['v_ftp'])) && (empty($_SESSION['error_msg']))) { + $v_ftp_users_updated = array(); + foreach ($_POST['v_ftp_user'] as $i => $v_ftp_user_data) { + if ($v_ftp_user_data['is_new'] == 1) { + if ((!empty($v_ftp_user_data['v_ftp_email'])) && (!filter_var($v_ftp_user_data['v_ftp_email'], FILTER_VALIDATE_EMAIL))) $_SESSION['error_msg'] = __('Please enter valid email address.'); + if (empty($v_ftp_user_data['v_ftp_user'])) $errors[] = 'ftp user'; + if (empty($v_ftp_user_data['v_ftp_password'])) $errors[] = 'ftp user password'; + if (!empty($errors[0])) { + foreach ($errors as $i => $error) { + if ( $i == 0 ) { + $error_msg = $error; + } else { + $error_msg = $error_msg.", ".$error; + } + } + $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); + } + + // Validate email + if ((!empty($v_ftp_user_data['v_ftp_email'])) && (!filter_var($v_ftp_user_data['v_ftp_email'], FILTER_VALIDATE_EMAIL))) { + $_SESSION['error_msg'] = __('Please enter valid email address.'); + } + + // Check ftp password length + if ((!empty($v_ftp_user_data['v_ftp']))) { + if (!empty($v_ftp_user_data['v_ftp_user'])) { + $pw_len = strlen($v_ftp_user_data['v_ftp_password']); + if ($pw_len < 6 ) $_SESSION['error_msg'] = __('Password is too short.',$error_msg); + } + } + + $v_ftp_user_data['v_ftp_user'] = preg_replace("/^".$user."_/i", "", $v_ftp_user_data['v_ftp_user']); + $v_ftp_username = $v_ftp_user_data['v_ftp_user']; + $v_ftp_username_full = $user . '_' . $v_ftp_user_data['v_ftp_user']; + $v_ftp_user = escapeshellarg($v_ftp_user_data['v_ftp_user']); + $v_ftp_password = escapeshellarg($v_ftp_user_data['v_ftp_password']); + + if ($domain_added) { + exec (VESTA_CMD."v-add-web-domain-ftp ".$user." ".$v_domain." ".$v_ftp_username." ".$v_ftp_password . " " . $v_ftp_user_data['v_ftp_path'], $output, $return_var); + check_return_code($return_var,$output); + unset($output); + if ((!empty($v_ftp_user_data['v_ftp_email'])) && (empty($_SESSION['error_msg']))) { + $to = $v_ftp_user_data['v_ftp_email']; + $subject = __("FTP login credentials"); + $from = __('MAIL_FROM',$_POST['v_domain']); + $mailtext = __('FTP_ACCOUNT_READY',$_POST['v_domain'],$user,$v_ftp_user_data['v_ftp_user'],$v_ftp_user_data['v_ftp_password']); + send_email($to, $subject, $mailtext, $from); + unset($v_ftp_email); + } + } else { + $return_var = -1; + } + + if ($return_var == 0) { + $v_ftp_password = "••••••••"; + $v_ftp_user_data['is_new'] = 0; + } else { + $v_ftp_user_data['is_new'] = 1; + } + + $v_ftp_username = preg_replace("/^".$user."_/", "", $v_ftp_user_data['v_ftp_user']); + $v_ftp_users_updated[] = array( + 'is_new' => $v_ftp_user_data['is_new'], + 'v_ftp_user' => $return_var == 0 ? $v_ftp_username_full : $v_ftp_username, + 'v_ftp_password' => $v_ftp_password, + 'v_ftp_path' => $v_ftp_user_data['v_ftp_path'], + 'v_ftp_email' => $v_ftp_user_data['v_ftp_email'], + 'v_ftp_pre_path' => $v_ftp_user_prepath + ); + continue; + } + } + + if (!empty($_SESSION['error_msg']) && $domain_added) { + $_SESSION['ok_msg'] = __('WEB_DOMAIN_CREATED_OK',$_POST[v_domain],$_POST[v_domain]); + $_SESSION['flash_error_msg'] = $_SESSION['error_msg']; + $url = '/edit/web/?domain='.strtolower(preg_replace("/^www\./i", "", $_POST['v_domain'])); + header('Location: ' . $url); + exit; + } + } + + // Flush field values on success + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('WEB_DOMAIN_CREATED_OK',$_POST[v_domain],$_POST[v_domain]); + unset($v_domain); + unset($v_aliases); + unset($v_ssl); + unset($v_ssl_crt); + unset($v_ssl_key); + unset($v_ssl_ca); + unset($v_stats_user); + unset($v_stats_password); + unset($v_ftp); + } +} + + // Header include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); // Panel top_panel($user,$TAB); + +// Define user variables +$v_ftp_user_prepath = $panel[$user]['HOME'] . "/web"; $v_ftp_email = $panel[$user]['CONTACT']; - if (!empty($_POST['ok'])) { - // Check input - if (empty($_POST['v_domain'])) $errors[] = __('domain'); - if (empty($_POST['v_ip'])) $errors[] = __('ip'); - if ((!empty($_POST['v_ssl'])) && (empty($_POST['v_ssl_crt']))) $errors[] = __('ssl certificate'); - if ((!empty($_POST['v_ssl'])) && (empty($_POST['v_ssl_key']))) $errors[] = __('ssl key'); - if ((!empty($_POST['v_aliases'])) && ($_POST['v_aliases'] != 'www.'.$_POST['v_domain'])) $v_adv = 'yes'; - if ((!empty($_POST['v_ssl'])) || (!empty($_POST['v_elog']))) $v_adv = 'yes'; - if ((!empty($_POST['v_ssl_crt'])) || (!empty($_POST['v_ssl_key']))) $v_adv = 'yes'; - if ((!empty($_POST['v_ssl_ca'])) || ($_POST['v_stats'] != 'none')) $v_adv = 'yes'; - if (empty($_POST['v_proxy'])) $v_adv = 'yes'; - if (!empty($_POST['v_ftp'])) $v_adv = 'yes'; - $v_proxy_ext = 'jpeg, jpg, png, gif, bmp, ico, svg, tif, tiff, css, js, htm, html, ttf,'; - $v_proxy_ext .= 'otf, webp, woff, txt, csv, rtf, doc, docx, xls, xlsx, ppt, pptx, odf, '; - $v_proxy_ext .= 'odp, ods, odt, pdf, psd, ai, eot, eps, ps, zip, tar, tgz, gz, rar, '; - $v_proxy_ext .= 'bz2, 7z, aac, m4a, mp3, mp4, ogg, wav, wma, 3gp, avi, flv, m4v, mkv, '; - $v_proxy_ext .= 'mov, mp4, mpeg, mpg, wmv, exe, iso, dmg, swf'; - if ($_POST['v_proxy_ext'] != $v_proxy_ext) $v_adv = 'yes'; +// List IP addresses +exec (VESTA_CMD."v-list-user-ips ".$user." json", $output, $return_var); +$ips = json_decode(implode('', $output), true); +unset($output); - // Protect input - $v_domain = preg_replace("/^www\./i", "", $_POST['v_domain']); - $v_domain = escapeshellarg($v_domain); - $v_domain = strtolower($v_domain); - $v_ip = escapeshellarg($_POST['v_ip']); - if (empty($_POST['v_dns'])) $v_dns = 'off'; - if (empty($_POST['v_mail'])) $v_mail = 'off'; - if (empty($_POST['v_proxy'])) $v_proxy = 'off'; - $v_aliases = $_POST['v_aliases']; - $v_elog = $_POST['v_elog']; - $v_ssl = $_POST['v_ssl']; - $v_ssl_crt = $_POST['v_ssl_crt']; - $v_ssl_key = $_POST['v_ssl_key']; - $v_ssl_ca = $_POST['v_ssl_ca']; - $v_ssl_home = $data[$v_domain]['SSL_HOME']; - $v_stats = escapeshellarg($_POST['v_stats']); - $v_stats_user = $data[$v_domain]['STATS_USER']; - $v_stats_password = $data[$v_domain]['STATS_PASSWORD']; - $v_proxy_ext = preg_replace("/\n/", " ", $_POST['v_proxy_ext']); - $v_proxy_ext = preg_replace("/,/", " ", $v_proxy_ext); - $v_proxy_ext = preg_replace('/\s+/', ' ',$v_proxy_ext); - $v_proxy_ext = trim($v_proxy_ext); - $v_proxy_ext = str_replace(' ', ", ", $v_proxy_ext); - $v_ftp = $_POST['v_ftp']; - $v_ftp_user = $_POST['v_ftp_user']; - $v_ftp_password = $_POST['v_ftp_password']; - $v_ftp_email = $_POST['v_ftp_email']; +// List web stat engines +exec (VESTA_CMD."v-list-web-stats json", $output, $return_var); +$stats = json_decode(implode('', $output), true); +unset($output); - // Validate email - if ((!empty($_POST['v_ftp_email'])) && (!filter_var($_POST['v_ftp_email'], FILTER_VALIDATE_EMAIL))) { - $_SESSION['error_msg'] = __('Please enter valid email address.'); - } +// Display body +include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_web.html'); - // Check ftp password length - if ((!empty($_POST['v_ftp'])) && (empty($_SESSION['error_msg']))) { - if (!empty($_POST['v_ftp_user'])) { - $pw_len = strlen($_POST['v_ftp_password']); - if ($pw_len < 6 ) $_SESSION['error_msg'] = __('Password is too short.',$error_msg); - } - } - - // Check stats password length - if ((!empty($v_stats)) && (empty($_SESSION['error_msg']))) { - if (!empty($_POST['v_stats_user'])) { - $pw_len = strlen($_POST['v_stats_password']); - if ($pw_len < 6 ) $_SESSION['error_msg'] = __('Password is too short.',$error_msg); - } - } - - // Check for errors - if (!empty($errors[0])) { - foreach ($errors as $i => $error) { - if ( $i == 0 ) { - $error_msg = $error; - } else { - $error_msg = $error_msg.", ".$error; - } - } - $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); - } - - if (empty($_SESSION['error_msg'])) { - // Add WEB - exec (VESTA_CMD."v-add-web-domain ".$user." ".$v_domain." ".$v_ip." 'no'", $output, $return_var); - check_return_code($return_var,$output); - unset($output); - - // Add DNS - if (($_POST['v_dns'] == 'on') && (empty($_SESSION['error_msg']))) { - exec (VESTA_CMD."v-add-dns-domain ".$user." ".$v_domain." ".$v_ip, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - - // Add Mail - if (($_POST['v_mail'] == 'on') && (empty($_SESSION['error_msg']))) { - exec (VESTA_CMD."v-add-mail-domain ".$user." ".$v_domain, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - - // Add Aliases - if ((!empty($_POST['v_aliases'])) && (empty($_SESSION['error_msg']))) { - $valiases = preg_replace("/\n/", " ", $_POST['v_aliases']); - $valiases = preg_replace("/,/", " ", $valiases); - $valiases = preg_replace('/\s+/', ' ',$valiases); - $valiases = trim($valiases); - $aliases = explode(" ", $valiases); - foreach ($aliases as $alias) { - if ($alias == 'www.'.$_POST['v_domain']) { - $www_alias = 'yes'; - } else { - $alias = escapeshellarg($alias); - if (empty($_SESSION['error_msg'])) { - exec (VESTA_CMD."v-add-web-domain-alias ".$user." ".$v_domain." ".$alias." 'no'", $output, $return_var); - check_return_code($return_var,$output); - } - unset($output); - if (($_POST['v_dns'] == 'on') && (empty($_SESSION['error_msg']))) { - exec (VESTA_CMD."v-add-dns-on-web-alias ".$user." ".$v_domain." ".$alias." 'no'", $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - } - } - } - if ((empty($www_alias)) && (empty($_SESSION['error_msg']))) { - $alias = preg_replace("/^www./i", "", $_POST['v_domain']); - $alias = 'www.'.$alias; - $alias = escapeshellarg($alias); - exec (VESTA_CMD."v-delete-web-domain-alias ".$user." ".$v_domain." ".$alias." 'no'", $output, $return_var); - check_return_code($return_var,$output); - } - - - // Add proxy - if (($_POST['v_proxy'] == 'on') && (empty($_SESSION['error_msg']))) { - $ext = str_replace(' ', '', $v_proxy_ext); - $ext = escapeshellarg($ext); - exec (VESTA_CMD."v-add-web-domain-proxy ".$user." ".$v_domain." '' ".$ext." 'no'", $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - - // Add SSL - if (!empty($_POST['v_ssl'])) { - exec ('mktemp -d', $output, $return_var); - $tmpdir = $output[0]; - - // Certificate - if (!empty($_POST['v_ssl_crt'])) { - $fp = fopen($tmpdir."/".$_POST['v_domain'].".crt", 'w'); - fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_crt'])); - fwrite($fp, "\n"); - fclose($fp); - } - - // Key - if (!empty($_POST['v_ssl_key'])) { - $fp = fopen($tmpdir."/".$_POST['v_domain'].".key", 'w'); - fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_key'])); - fwrite($fp, "\n"); - fclose($fp); - } - - // CA - if (!empty($_POST['v_ssl_ca'])) { - $fp = fopen($tmpdir."/".$_POST['v_domain'].".ca", 'w'); - fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_ca'])); - fwrite($fp, "\n"); - fclose($fp); - } - - $v_ssl_home = escapeshellarg($_POST['v_ssl_home']); - exec (VESTA_CMD."v-add-web-domain-ssl ".$user." ".$v_domain." ".$tmpdir." ".$v_ssl_home." 'no'", $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - - // Add WebStats - if ((!empty($_POST['v_stats'])) && ($_POST['v_stats'] != 'none' ) && (empty($_SESSION['error_msg']))) { - $v_stats = escapeshellarg($_POST['v_stats']); - exec (VESTA_CMD."v-add-web-domain-stats ".$user." ".$v_domain." ".$v_stats, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - - if ((!empty($_POST['v_stats_user'])) && (empty($_SESSION['error_msg']))) { - $v_stats_user = escapeshellarg($_POST['v_stats_user']); - $v_stats_password = escapeshellarg($_POST['v_stats_password']); - exec (VESTA_CMD."v-add-web-domain-stats-user ".$user." ".$v_domain." ".$v_stats_user." ".$v_stats_password, $output, $return_var); - check_return_code($return_var,$output); - unset($v_stats_user); - unset($v_stats_password); - unset($output); - } - } - - - // Add FTP - if ((!empty($_POST['v_ftp'])) && (empty($_SESSION['error_msg']))) { - $v_ftp_user = escapeshellarg($_POST['v_ftp_user']); - $v_ftp_password = escapeshellarg($_POST['v_ftp_password']); - exec (VESTA_CMD."v-add-web-domain-ftp ".$user." ".$v_domain." ".$v_ftp_user." ".$v_ftp_password, $output, $return_var); - check_return_code($return_var,$output); - if (empty($_SESSION['error_msg'])) { - if (!empty($v_ftp_email)) { - $to = $_POST['v_ftp_email']; - $subject = __("FTP login credentials"); - $hostname = exec('hostname'); - $from = __('MAIL_FROM',$hostname); - $mailtext .= __('FTP_ACCOUNT_READY',$_POST['v_domain'],$user,$_POST['v_ftp_user'],$_POST['v_ftp_password']); - send_email($to, $subject, $mailtext, $from); - } - } - unset($v_ftp); - unset($v_ftp_user); - unset($v_ftp_password); - unset($output); - } - - if (($_POST['v_dns'] == 'on') && (empty($_SESSION['error_msg']))) { - exec (VESTA_CMD."v-restart-dns", $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - - if (empty($_SESSION['error_msg'])) { - exec (VESTA_CMD."v-restart-web", $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - - if (empty($_SESSION['error_msg'])) { - exec (VESTA_CMD."v-restart-proxy", $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - - if (empty($_SESSION['error_msg'])) { - unset($output); - $_SESSION['ok_msg'] = __('WEB_DOMAIN_CREATED_OK',$_POST[v_domain],$_POST[v_domain]); - unset($v_domain); - unset($v_aliases); - unset($v_ssl); - unset($v_ssl_crt); - unset($v_ssl_key); - unset($v_ssl_ca); - } - } - } - - exec (VESTA_CMD."v-list-user-ips ".$user." json", $output, $return_var); - $ips = json_decode(implode('', $output), true); - unset($output); - - exec (VESTA_CMD."v-list-web-stats json", $output, $return_var); - $stats = json_decode(implode('', $output), true); - unset($output); - - include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_web.html'); - unset($_SESSION['error_msg']); - unset($_SESSION['ok_msg']); -//} +// Flush session messages +unset($_SESSION['error_msg']); +unset($_SESSION['ok_msg']); // Footer include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); diff --git a/web/api/index.php b/web/api/index.php index 4ea052279..80354da07 100644 --- a/web/api/index.php +++ b/web/api/index.php @@ -26,7 +26,8 @@ if (isset($_POST['user']) || isset($_POST['hash'])) { echo 'Error: only admin is allowed to use API'; exit; } - + + // Prepare arguments if (isset($_POST['cmd'])) $cmd = escapeshellarg($_POST['cmd']); if (isset($_POST['arg1'])) $arg1 = escapeshellarg($_POST['arg1']); @@ -39,8 +40,31 @@ if (isset($_POST['user']) || isset($_POST['hash'])) { if (isset($_POST['arg8'])) $arg8 = escapeshellarg($_POST['arg8']); if (isset($_POST['arg9'])) $arg9 = escapeshellarg($_POST['arg9']); - // Run query - exec (VESTA_CMD.$cmd." ".$arg1." ".$arg2." ".$arg3." ".$arg4." ".$arg5." ".$arg6." ".$arg7." ".$arg8." ".$arg9, $output, $return_var); + // Build query + $cmdquery = VESTA_CMD.$cmd." "; + + if(!empty($arg1)){ + $cmdquery = $cmdquery.$arg1." "; } + if(!empty($arg2)){ + $cmdquery = $cmdquery.$arg2." "; } + if(!empty($arg3)){ + $cmdquery = $cmdquery.$arg3." "; } + if(!empty($arg4)){ + $cmdquery = $cmdquery.$arg4." "; } + if(!empty($arg5)){ + $cmdquery = $cmdquery.$arg5." "; } + if(!empty($arg6)){ + $cmdquery = $cmdquery.$arg6." "; } + if(!empty($arg7)){ + $cmdquery = $cmdquery.$arg7." "; } + if(!empty($arg8)){ + $cmdquery = $cmdquery.$arg8." "; } + if(!empty($arg9)){ + $cmdquery = $cmdquery.$arg9; } + + // Run query + exec ($cmdquery, $output, $return_var); + if ((!empty($_POST['returncode'])) && ($_POST['returncode'] == 'yes')) { echo $return_var; } else { diff --git a/web/css/jquery-custom-dialogs.css b/web/css/jquery-custom-dialogs.css index f1a4fa752..f0cb265ab 100644 --- a/web/css/jquery-custom-dialogs.css +++ b/web/css/jquery-custom-dialogs.css @@ -35,7 +35,7 @@ ----------------------------------*/ /* Overlays */ -.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: #e6e6e6;} +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: #999;} /*! @@ -58,7 +58,7 @@ .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Arial, Helvetica, sans-serif; font-size: 10pt; } .ui-widget-content { border: 1px solid #aaaaaa; color: #222222; } .ui-widget-content a { color: #222222; } -.ui-widget-header { background: #505050; color: #444; font-size: 10pt; font-weight: bold;} +.ui-widget-header { background: #777; color: #444; font-size: 10pt; font-weight: bold;} .ui-widget-header a { color: #222222; } /* Interaction Cues @@ -75,14 +75,14 @@ /* Icons ----------------------------------*/ -/* states and images */ +/* states and images .ui-icon { width: 16px; height: 16px; } .ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); } .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } .ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); } .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); } - +*/ /* positioning */ .ui-icon-carat-1-n { background-position: 0 0; } @@ -376,8 +376,8 @@ * http://docs.jquery.com/UI/Button#theming */ .ui-button { display: inline-block; position: relative; padding: 0; margin-right: .10pt; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ -.ui-button { filter:chroma(color=#000000); cursor: pointer; color: #555; background-color: #ececec; border: 1px solid #e0e0e0; border-radius: 3px 3px 3px 3px; font-weight: bold; font-size: 14px; padding: 2px 16px; width: 108px; height: 34px; } -.ui-button:hover { border: 1px solid #f79b44; background-color: #f79b44; color: #fff;} +.ui-button { filter:chroma(color=#000000); cursor: pointer; color: #fff; background-color: #f79b44; border: 1px solid #f79b44; border-radius: 3px 3px 3px 3px; font-weight: bold; font-size: 14px; padding: 2px 16px; width: 108px; height: 34px; } +.ui-button:hover { border: 1px solid #9e9e9e; background-color: #9e9e9e; color: #fff;} .ui-button:active { background-color: #ccc; color: #fff; border: 1px solid #ccc; } .ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ diff --git a/web/css/main.css b/web/css/main.css index cfa86d9b1..4e2c6ecfb 100644 --- a/web/css/main.css +++ b/web/css/main.css @@ -1,6 +1,6 @@ body { font-family: Arial, Helvetica, sans-serif; - background-color: #e5e5e5; + background-color: #75b0c5; margin: 0; padding: 0; border: 0; @@ -19,6 +19,9 @@ td { padding: 0; } +label { + cursor: pointer; +} .hidden { display: none; @@ -26,13 +29,33 @@ td { .top { width: 1000px; - position: fixed; background: #fff; - border-bottom: 1px solid #e5e5e5; } +.top.small .submenu{ + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.10); +} + + +.top .nav-logo .logo-container{ + background-color: #fff; + width: 167px; +} + +.top.small-logo .nav-logo .logo-container{ + position: fixed; +} +.top.small-logo .nav-logo img{ + margin: 29px 0 -4px 10px; + padding: 0 0 10px; +} + + .top-menu { height: 24px; background-color: #505050; + width: 1000px; + position: fixed; + z-index: 10; } .top-link { @@ -51,9 +74,9 @@ td { background-color: #f79b44; } -.top-link:active{ - color: #2361a1; - background-color: #f1f1f1; +.top-link:active { + color: #333; + background-color: #eee; } .top-selected-link { @@ -65,7 +88,7 @@ td { line-height: 22px; padding: 0 20px 2px; color: #333; - background-color: #f1f1f1; + background-color: #eee; } .top-selected-link:hover { @@ -75,7 +98,7 @@ td { .top-selected-link:active { color: #2361a1; - background-color: #f1f1f1; + background-color: #eee; } .top-user { @@ -93,7 +116,7 @@ td { color: #fff; } -.top-user:active{ +.top-user:active { color: #fff; background-color: #f79b44; } @@ -120,12 +143,21 @@ td { background-color: #999; } +.main-menu{ + display: block; + float: left; + margin-bottom: 1px; +} + .nav-logo { float: left; - height: 111px; + height: 139px; width: 167px; - margin: 0; - border-bottom: 1px solid #e5e5e5; + margin: 0 0 0px; +} + +.nav-logo img{ + margin: 56px 0 0 10px; } .nav-lnk { @@ -145,58 +177,96 @@ td { width: 119px; float:left; cursor: pointer; - border-bottom: 1px solid #e5e5e5; + padding-bottom: 2px; } .nav-block:hover { height:108px; - border-bottom: 4px solid #f79b44; + padding-bottom: 0; } .nav-selected-block { + padding-bottom: 0; font-family: Arial, Helvetica, sans-serif; margin: 0; - color: #2361a1; + color: #4a82be; height: 108px; width: 119px; float: left; - border-bottom: 4px solid #777777; cursor: pointer; } .nav-selected-block:hover { height:108px; - border-bottom: 4px solid #f79b44; } .nav-selected-block:active { color: #f79b44; } -.nav-header { - padding: 14px 0 0 6px; - margin: 0; - letter-spacing: -1.0px; - font-size: 16pt; - font-weight: bold; +.top .nav-block .marker, +.top .nav-selected-block .marker { + -webkit-transition: background .1s ease-in-out; + -moz-transition: background .1s ease-in-out; + -o-transition: background .1s ease-in-out; + transition: background .1s ease-in-out; + padding: 0; + height: 4px; + margin: 12px 0 0 0; + width: 100%; + background-color: #fff; } -.nav-selected-header { - padding: 14px 0 0 6px; - margin: 0; - letter-spacing: -1.0px; +.top .nav-selected-block .marker { + background-color: #777; + border-bottom: 1px solid #777; +} + +.top.small .marker{ + position: fixed; + top: 66px; + width: 119px; +} + +.nav-block:hover .marker{ + background-color: #f79b44; + border-bottom: 1px solid #f79b44; +} + +.nav-selected-block:hover .marker{ + background-color: #f79b44; + border-bottom: 1px solid #f79b44; +} + +.nav-header, .nav-selected-header { + background-color: #FFF; font-size: 16pt; font-weight: bold; + height: 27px; + letter-spacing: -1px; + margin: 0; + padding: 16px 0 0 6px; + position: fixed; + top: 24px; + width: 113px; + z-index: 10; +} + +.top.small .nav-header, .top.small .nav-selected-header{ + height: 38px; } .nav-counters { padding: 1px 0 0 6px; - margin: 0; + margin: 65px 0 0 0; height: 58px; line-height: 1.4em; font-size: 9pt; + font-family: Arial, Helvetica, sans-serif; color: #333; decoration: none; + overflow: hidden; + opacity: 0.8; } .submenu { @@ -204,6 +274,19 @@ td { vertical-align: middle; float: left; width: 1000px; + border-bottom: 1px solid #e1e8e8; + border-top: 1px solid #e1e8e8; + background-color: #fff; + margin-bottom: -1px; +} + +.top.small .submenu{ + position: fixed; + top: 82px; +} + +.submenu .wrapper{ + padding: 11px 10px 14px 10px; } .submenu-button-block { @@ -225,7 +308,7 @@ td { } .submenu-button-select { - width: 20px; + width: 28px; height: 28px; cursor: pointer; color: #555; @@ -272,16 +355,26 @@ td { } .submenu-button-main:hover { - border: 1px solid #999; - background-color: #999; + border: 1px solid #aaa; + background-color: #adaeae; + + -webkit-transition: background .1s ease-in-out; + -moz-transition: background .1s ease-in-out; + -o-transition: background .1s ease-in-out; + transition: background .1s ease-in-out; } .submenu-button-select:hover { - border: 1px solid #f79b44; + border: 1px solid #adaeae; + background-color: #adaeae; + color: #fff; } .submenu-button-search:hover { - border: 1px solid #f79b44; + border: 1px solid #adaeae; + background-color: #adaeae; + color: #fff; + } .submenu-button-main:active { @@ -307,7 +400,7 @@ td { } .submenu-select-link { - color: #6A6A6A; + color: #6a6a6a; display: block; float: left; font-size: 8pt; @@ -318,33 +411,46 @@ td { } .submenu-select-link:hover { - text-decoration: underline; + color: #fff; + background-color: #f79b44; } .submenu-select-link:active { color: #fff; - background-color: #f79b44; - text-decoration: underline; + background-color: #777; } .submenu-select-dropdown { font-family:Arial, Helvetica, sans-serif; font-size: 9pt; - color: #333333; + color: #333; display: block; float: left; height: 28px; margin: 0 4px 0 0; min-width: 138px; - background-color: #FFFFFF; - border: 1px solid #CCCCCC; + background-color: #fff; + border: 1px solid #ccc; border-radius: 3px 3px 3px 3px; padding: 4px 5px; } + +.submenu-select-dropdown:hover { + border: 1px solid #909090; +} + +.submenu-select-dropdown:focus { + border: 1px solid #f79b44; + background-color: #fffcd2; + color: #333; +} + + .submenu-select-dropdown option { padding: 5px 5px 5px 8px; } + .submenu-search-block { display: block; text-align: right; @@ -365,11 +471,13 @@ td { } .submenu-search-field:hover { - border: 1px solid #f79b44; + border: 1px solid #909090; } .submenu-search-field:focus { border: 1px solid #f79b44; + background-color: #FFFCD2; + color: #333; } .bottom { @@ -403,11 +511,11 @@ td { } .vst { - padding: 4px 4px 0 4px; + padding: 5px 7px 0 7px; margin: 0; text-decoration: none; color: #999; - font-size: 12pt; + font-size: 11pt; float: left; } @@ -421,11 +529,11 @@ td { } .vst-selected { - padding: 4px 4px 0 4px; + padding: 5px 7px 0 7px; margin: 0; text-decoration: none; color: #2361a1; - font-size: 12pt; + font-size: 11pt; float: left; } @@ -448,21 +556,18 @@ td { font-size: 12pt; text-align: left; vertical-align:top; - margin: 0; + margin: 1px 0 0 0; behavior:url("/css/csshover3.htc"); + background-color: #fff } .data a { text-decoration: none; } -.data-row:hover { - margin: 0; - background-color: #f7f6ed; -} -.data-row:active { - background-color: #f7f7d8; +.data-row.selected, .data-row.selected.suspended{ + background-color: #e4e9e9; } .datarowhover { @@ -529,7 +634,7 @@ td { .data-date { letter-spacing: 0.3em; font-size: 8pt; - color: #6A6A6A + color: #6a6a6a } .data-active { @@ -549,33 +654,41 @@ td { height: 16px; border-left: 1px solid #d3d3d3; font-size: 8pt; - padding: 2px 12px 1px 6px; + padding: 6px 11px 2px; letter-spacing: 0.1em; - color: #2361a1; + color: #3e7c91; text-decoration: none; cursor: pointer; } +.data-controls.edit{ + font-weight: bold; + letter-spacing: 0; +} + .data-controls:hover { color: #fff; background-color: #f79b44; } .data-controls:active { - background-color: #999 + background-color: #999; } + .data-controls img { border: 0px; } +.ch-toggle { + cursor: pointer; +} + .data-count { font-family: Arial, Helvetica, sans-serif; - background-color: #f3f3f3; - color: #555; + color: #505050; font-size: 8pt; - margin: 18px 0 0 0; - padding: 0 16px 0 0; + padding: 20px 0 20px 174px; } .chart1 { @@ -600,6 +713,14 @@ td { padding: 1px 0 2px 0; } +.suspended .domain { + color: #777; +} + +.domain.hostname { + font-size: 16pt; +} + .cron { color: #222; font-size: 18px; @@ -633,7 +754,7 @@ td { .counter-name { white-space: nowrap; vertical-align:top; - line-height: 1.3em; + line-height: 1.2em; font-size: 10pt; color: #222; padding: 2px 4px 1px 0; @@ -649,7 +770,7 @@ td { .counter-value { vertical-align:top; - line-height: 1.3em; + line-height: 1.2em; font-size: 10pt; color: #222; padding: 2px 0 1px 2px; @@ -676,17 +797,17 @@ td { .vst-ok { font-size: 12pt; - color: #62a358; + color: #33691e; padding: 4px; } -.vst-ok a{ - color: #58934f; - text-decoration: none; +.vst-ok a { + color: #33691e; } -.vst-ok a:hover{ - text-decoration: underline; +.vst-ok a:hover { + background: #f79b44; + color: #fff; } .vst-error { @@ -714,11 +835,13 @@ td { } .vst-textinput:hover { - border: 1px solid #f79b44; + border: 1px solid #909090; } .vst-textinput:focus { border: 1px solid #f79b44; + background-color: #fffcd2; + color: #333; } .vst-textinput:disabled { @@ -738,17 +861,23 @@ td { } .vst-input:hover { - border: 1px solid #f79b44; + border: 1px solid #909090; } .vst-input:focus { border: 1px solid #f79b44; + background-color: #fffcd2; + color: #333; } .vst-input:disabled { background-color: #f1f1f1; } +.vst-input.long{ + width: 580px; +} + .vst-list { font-family:Arial, Helvetica, sans-serif; font-size: 12pt; @@ -768,7 +897,7 @@ td { padding: 5px; font-size: 12pt; border: 1px solid #f7f6ed; - margin: 2px 6px 0 0; + margin: 2px 6px 0 3px; } .vst-checkbox:hover { @@ -776,23 +905,23 @@ td { } .button { - filter:chroma(color=#000000); + filter:chroma(color=#000); cursor: pointer; border-radius: 3px 3px 3px 3px; - font-size: 14px; + font-size: 13px; font-weight: bold; - padding: 2px 16px; + padding: 1px 16px 3px 16px; width: 108px; height: 34px; - color: #555; - background-color: #fff; - border: 1px solid #ccc; + color: #fafafa; + border: 1px solid #f79b44; + background-color: #f79b44; } .button:hover { color: #fff; - border: 1px solid #f79b44; - background-color: #f79b44; + border: 1px solid #999; + background-color: #999; } .button:active { @@ -801,7 +930,7 @@ td { } .login-button { - filter:chroma(color=#000000); + filter:chroma(color=#000); cursor: pointer; border-radius: 3px 3px 3px 3px; font-size: 14px; @@ -810,14 +939,13 @@ td { width: 108px; height: 34px; color: #fff; - background-color: #999; - border: 1px solid #999; + background-color: #f79b44; + border: 1px solid #f79b44; } .login-button:hover { - color: #fff; - border: 1px solid #f79b44; - background-color: #f79b44; + border: 1px solid #adaeae; + background-color: #adaeae; } .login-button:active { @@ -838,12 +966,12 @@ td { } .generate:hover { - color: #7fa1cb; + background-color: #f79b44; + color: #fff; } .generate:active { - background-color: #f79b44; - color: #fff; + background-color: #999; } .vst-advanced { @@ -856,15 +984,16 @@ td { } .vst-advanced:hover { - color: #7fa1cb; -} - -.vst-advanced:active { color: #fff; background-color: #f79b44; } -.fixed{ +.vst-advanced:active { + color: #fff; + background-color: #777; +} + +.fixed { position: fixed; border: none; top: -3px; @@ -872,7 +1001,7 @@ td { background-color: #fff; } -*html .fixed{ +*html .fixed { position:absolute; position:fixed; _position:absolute; @@ -880,7 +1009,7 @@ td { _top:expression( eval(document.body.scrollTop) + 'px' ); } -#vstobjects{ +#vstobjects { padding-top: 193px; min-height: 372px; } @@ -903,27 +1032,148 @@ td { } .login-bottom { - color: #ebe9dc; text-align: right; vertical-align:top; - width: 500px; + width: 474px; height: 50px; margin: 0; + padding: 0 26px 0 0; } -.vestacp{ +.vestacp { font-size: 8pt; - color: #222; + color: #505050; text-align: right; - padding: 0 8px 0 0; } .error { font-size: 10pt; - color: #dE6c5d; + color: #de6c5d; } .hint { font-size: 14pt; color: #7fa1cb; } + +.step-top { + padding-top: 42px; +} + +.step-bottom { + padding-bottom: 20px; +} + +.step-left { + padding-left: 50px; +} + +.input-label { + padding-top: 20px; +} + +.additional-control { + margin-left: 20px; + color: #2361a1; + border-bottom: 1px solid #f79b44; + font-size: 10pt; + letter-spacing: 0.1em; + cursor: pointer; +} + +.additional-control:hover { + color: #7fa1cb; +} + +.additional-control:active { + color: #fff; + background-color: #f79b44; +} + +.ftp-path-prefix { + color: #848483; + font-size: 13px; +} + +.ftp-path-value { + color: #333; + font-size: 13px; + font-weight: bold; +} + +.data .suspended { + background: url(/images/disabled_bg.png); +} + +.timer-container .refresh-timer { + border: 2px solid #c0d4a6; + border-radius: 14px; + height: 14px; + width: 14px; + margin: 10px; + float: left; + margin: 7px 10px 0 0; +} + +.timer-container .refresh-timer.paused{ + border: 2px solid #9f9f9f; +} + +.timer-container .refresh-timer.paused .loader-half.right, +.timer-container .refresh-timer.paused .loader-half.dark{ + background-color: #9F9F9F; +} + +.timer-container .loader-half { + border-radius: 0 14px 14px 0; + height: 14px; + width: 7px; + float: left; +} + +.timer-container .loader-half.left { + border-radius: 14px 0 0 14px; + background-color: #fff; +} + +.timer-container .loader-half.right { + margin-left: 7px; + background-color: #c0d4a6; +} + +.timer-container .loader-half.dark{ + background-color: #c0d4a6; +} + +.timer-container .movement{ + float: left; + width: 14px; + height: 14px; + position: absolute; +} + +.timer-container .movement.left { + z-index: 10; +} + +.timer-container .movement.right{ + transform: rotate(180deg); + -webkit-transform: rotate(180deg); +} + +.timer-container .timer-button{ + cursor: pointer; + text-decotation: underline; + margin: 11px 0 0 38px; + width: 15px; + float: left; + height: 10px; +} + +.timer-container .timer-button.pause{ + background: url(/images/pause.png) no-repeat ; +} + +.timer-container .timer-button.play{ + background: url(/images/start.png) no-repeat; +} diff --git a/web/delete/cron/autoupdate/index.php b/web/delete/cron/autoupdate/index.php index 14d297854..ad670ef03 100644 --- a/web/delete/cron/autoupdate/index.php +++ b/web/delete/cron/autoupdate/index.php @@ -7,7 +7,7 @@ include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); if ($_SESSION['user'] == 'admin') { exec (VESTA_CMD."v-delete-cron-vesta-autoupdate", $output, $return_var); - $_SESSION['error_msg'] = __('Autoupdate has been susscessfully disabled'); + $_SESSION['error_msg'] = __('Autoupdate has been successfully disabled'); unset($output); } diff --git a/web/edit/backup/exclusions/index.php b/web/edit/backup/exclusions/index.php index a9c09929e..3f0e81130 100644 --- a/web/edit/backup/exclusions/index.php +++ b/web/edit/backup/exclusions/index.php @@ -3,116 +3,129 @@ error_reporting(NULL); ob_start(); session_start(); - $TAB = 'BACKUP EXCLUSIONS'; + include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); +// Edit as someone else? +if (($_SESSION['user'] == 'admin') && (!empty($_GET['user']))) { + $user=escapeshellarg($_GET['user']); +} + +// List backup exclustions +exec (VESTA_CMD."v-list-user-backup-exclusions ".$user." 'json'", $output, $return_var); +check_return_code($return_var,$output); +$data = json_decode(implode('', $output), true); +unset($output); + +// Parse web +$v_username = $user; +foreach ($data['WEB'] as $key => $value) { + if (!empty($value)){ + $v_web .= $key . ":" . $value. "\n"; + } else { + $v_web .= $key . "\n"; + } +} + +// Parse dns +foreach ($data['DNS'] as $key => $value) { + if (!empty($value)){ + $v_dns .= $key . ":" . $value. "\n"; + } else { + $v_dns .= $key . "\n"; + } +} + +// Parse mail +foreach ($data['MAIL'] as $key => $value) { + if (!empty($value)){ + $v_mail .= $key . ":" . $value. "\n"; + } else { + $v_mail .= $key . "\n"; + } +} + +// Parse databases +foreach ($data['DB'] as $key => $value) { + if (!empty($value)){ + $v_db .= $key . ":" . $value. "\n"; + } else { + $v_db .= $key . "\n"; + } +} + +// Parse user directories +foreach ($data['USER'] as $key => $value) { + if (!empty($value)){ + $v_userdir .= $key . ":" . $value. "\n"; + } else { + $v_userdir .= $key . "\n"; + } +} + +// Check POST request +if (!empty($_POST['save'])) { + $v_web = $_POST['v_web']; + $v_web_tmp = str_replace("\r\n", ",", $_POST['v_web']); + $v_web_tmp = rtrim($v_web_tmp, ","); + $v_web_tmp = "WEB=" . escapeshellarg($v_web_tmp); + + $v_dns = $_POST['v_dns']; + $v_dns_tmp = str_replace("\r\n", ",", $_POST['v_dns']); + $v_dns_tmp = rtrim($v_dns_tmp, ","); + $v_dns_tmp = "DNS=" . escapeshellarg($v_dns_tmp); + + $v_mail = $_POST['v_mail']; + $v_mail_tmp = str_replace("\r\n", ",", $_POST['v_mail']); + $v_mail_tmp = rtrim($v_mail_tmp, ","); + $v_mail_tmp = "MAIL=" . escapeshellarg($v_mail_tmp); + + $v_db = $_POST['v_db']; + $v_db_tmp = str_replace("\r\n", ",", $_POST['v_db']); + $v_db_tmp = rtrim($v_db_tmp, ","); + $v_db_tmp = "DB=" . escapeshellarg($v_db_tmp); + + $v_cron = $_POST['v_cron']; + $v_cron_tmp = str_replace("\r\n", ",", $_POST['v_cron']); + $v_cron_tmp = rtrim($v_cron_tmp, ","); + $v_cron_tmp = "CRON=" . escapeshellarg($v_cron_tmp); + + $v_userdir = $_POST['v_userdir']; + $v_userdir_tmp = str_replace("\r\n", ",", $_POST['v_userdir']); + $v_userdir_tmp = rtrim($v_userdir_tmp, ","); + $v_userdir_tmp = "USER=" . escapeshellarg($v_userdir_tmp); + + // Create temporary exeption list on a filesystem + exec ('mktemp', $mktemp_output, $return_var); + $tmp = $mktemp_output[0]; + $fp = fopen($tmp, 'w'); + fwrite($fp, $v_web_tmp . "\n" . $v_dns_tmp . "\n" . $v_mail_tmp . "\n" . $v_db_tmp . "\n" . $v_userdir_tmp . "\n"); + fclose($fp); + unset($mktemp_output); + + // Save changes + exec (VESTA_CMD."v-update-user-backup-exclusions ".$user." ".$tmp, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + + // Set success message + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __("Changes has been saved."); + } +} + + // Header include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); // Panel top_panel($user,$TAB); -// Edit as someone else? -if (($_SESSION['user'] == 'admin') && (!empty($_GET['user']))) { - $user=escapeshellarg($_GET['user']); -} - -exec (VESTA_CMD."v-list-user-backup-exclusions ".$user." 'json'", $output, $return_var); -check_return_code($return_var,$output); -if (empty($_SESSION['error_msg'])) { - $data = json_decode(implode('', $output), true); - unset($output); - $v_username = $user; - - foreach ($data['WEB'] as $key => $value) { - if (!empty($value)){ - $v_web .= $key . ":" . $value. "\n"; - } else { - $v_web .= $key . "\n"; - } - } - - foreach ($data['DNS'] as $key => $value) { - if (!empty($value)){ - $v_dns .= $key . ":" . $value. "\n"; - } else { - $v_dns .= $key . "\n"; - } - } - - foreach ($data['MAIL'] as $key => $value) { - if (!empty($value)){ - $v_mail .= $key . ":" . $value. "\n"; - } else { - $v_mail .= $key . "\n"; - } - } - - foreach ($data['DB'] as $key => $value) { - if (!empty($value)){ - $v_db .= $key . ":" . $value. "\n"; - } else { - $v_db .= $key . "\n"; - } - } - - foreach ($data['USER'] as $key => $value) { - if (!empty($value)){ - $v_userdir .= $key . ":" . $value. "\n"; - } else { - $v_userdir .= $key . "\n"; - } - } - - - // Action - if (!empty($_POST['save'])) { - - $v_web = $_POST['v_web']; - $v_web_tmp = str_replace("\r\n", ",", $_POST['v_web']); - $v_web_tmp = rtrim($v_web_tmp, ","); - $v_web_tmp = "WEB=" . escapeshellarg($v_web_tmp); - - $v_dns = $_POST['v_dns']; - $v_dns_tmp = str_replace("\r\n", ",", $_POST['v_dns']); - $v_dns_tmp = rtrim($v_dns_tmp, ","); - $v_dns_tmp = "DNS=" . escapeshellarg($v_dns_tmp); - - $v_mail = $_POST['v_mail']; - $v_mail_tmp = str_replace("\r\n", ",", $_POST['v_mail']); - $v_mail_tmp = rtrim($v_mail_tmp, ","); - $v_mail_tmp = "MAIL=" . escapeshellarg($v_mail_tmp); - - $v_db = $_POST['v_db']; - $v_db_tmp = str_replace("\r\n", ",", $_POST['v_db']); - $v_db_tmp = rtrim($v_db_tmp, ","); - $v_db_tmp = "DB=" . escapeshellarg($v_db_tmp); - - $v_cron = $_POST['v_cron']; - $v_cron_tmp = str_replace("\r\n", ",", $_POST['v_cron']); - $v_cron_tmp = rtrim($v_cron_tmp, ","); - $v_cron_tmp = "CRON=" . escapeshellarg($v_cron_tmp); - - $v_userdir = $_POST['v_userdir']; - $v_userdir_tmp = str_replace("\r\n", ",", $_POST['v_userdir']); - $v_userdir_tmp = rtrim($v_userdir_tmp, ","); - $v_userdir_tmp = "USER=" . escapeshellarg($v_userdir_tmp); - - exec ('mktemp', $mktemp_output, $return_var); - $tmp = $mktemp_output[0]; - $fp = fopen($tmp, 'w'); - fwrite($fp, $v_web_tmp . "\n" . $v_dns_tmp . "\n" . $v_mail_tmp . "\n" . $v_db_tmp . "\n" . $v_userdir_tmp . "\n"); - fclose($fp); - exec (VESTA_CMD."v-update-user-backup-exclusions ".$user." ".$tmp, $output, $return_var); - check_return_code($return_var,$output); - if (empty($_SESSION['error_msg'])) { - $_SESSION['ok_msg'] = __("Changes has been saved."); - } - } -} - +// Display body include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_backup_exclusions.html'); + +// Flush session messages unset($_SESSION['error_msg']); unset($_SESSION['ok_msg']); diff --git a/web/edit/cron/index.php b/web/edit/cron/index.php index c5929b405..09d63cb5e 100644 --- a/web/edit/cron/index.php +++ b/web/edit/cron/index.php @@ -3,73 +3,79 @@ error_reporting(NULL); ob_start(); session_start(); - $TAB = 'CRON'; + include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); +// Edit as someone else? +if (($_SESSION['user'] == 'admin') && (!empty($_GET['user']))) { + $user=escapeshellarg($_GET['user']); +} + +// Check job id +if (empty($_GET['job'])) { + header("Location: /list/cron/"); + exit; +} + +// List cron job +$v_job = escapeshellarg($_GET['job']); +exec (VESTA_CMD."v-list-cron-job ".$user." ".$v_job." 'json'", $output, $return_var); +check_return_code($return_var,$output); +$data = json_decode(implode('', $output), true); +unset($output); + +// Parse cron job +$v_username = $user; +$v_job = $_GET['job']; +$v_min = $data[$v_job]['MIN']; +$v_hour = $data[$v_job]['HOUR']; +$v_day = $data[$v_job]['DAY']; +$v_month = $data[$v_job]['MONTH']; +$v_wday = $data[$v_job]['WDAY']; +$v_cmd = $data[$v_job]['CMD']; +$v_date = $data[$v_job]['DATE']; +$v_time = $data[$v_job]['TIME']; +$v_suspended = $data[$v_job]['SUSPENDED']; +if ( $v_suspended == 'yes' ) { + $v_status = 'suspended'; +} else { + $v_status = 'active'; +} + +// Check POST request +if (!empty($_POST['save'])) { + $v_username = $user; + $v_min = escapeshellarg($_POST['v_min']); + $v_hour = escapeshellarg($_POST['v_hour']); + $v_day = escapeshellarg($_POST['v_day']); + $v_month = escapeshellarg($_POST['v_month']); + $v_wday = escapeshellarg($_POST['v_wday']); + $v_cmd = escapeshellarg($_POST['v_cmd']); + + // Save changes + exec (VESTA_CMD."v-change-cron-job ".$v_username." ".$v_job." ".$v_min." ".$v_hour." ".$v_day." ".$v_month." ".$v_wday." ".$v_cmd, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + + $v_cmd = $_POST['v_cmd']; + + // Set success message + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __("Changes has been saved."); + } +} + // Header include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); // Panel top_panel($user,$TAB); -// Edit as someone else? -if (($_SESSION['user'] == 'admin') && (!empty($_GET['user']))) { - $user=escapeshellarg($_GET['user']); -} - -// Check user argument? -if (empty($_GET['job'])) { - header("Location: /list/cron/"); - exit; -} - -$v_job = escapeshellarg($_GET['job']); -exec (VESTA_CMD."v-list-cron-job ".$user." ".$v_job." 'json'", $output, $return_var); -check_return_code($return_var,$output); -if (empty($_SESSION['error_msg'])) { - $data = json_decode(implode('', $output), true); - unset($output); - $v_username = $user; - $v_job = $_GET['job']; - $v_min = $data[$v_job]['MIN']; - $v_hour = $data[$v_job]['HOUR']; - $v_day = $data[$v_job]['DAY']; - $v_month = $data[$v_job]['MONTH']; - $v_wday = $data[$v_job]['WDAY']; - $v_cmd = $data[$v_job]['CMD']; - $v_date = $data[$v_job]['DATE']; - $v_time = $data[$v_job]['TIME']; - $v_suspended = $data[$v_job]['SUSPENDED']; - if ( $v_suspended == 'yes' ) { - $v_status = 'suspended'; - } else { - $v_status = 'active'; - } - - // Action - if (!empty($_POST['save'])) { - $v_username = $user; - // Change job - if (($v_min != $_POST['v_min']) || ($v_hour != $_POST['v_hour']) || ($v_day != $_POST['v_day']) || ($v_month != $_POST['v_month']) || ($v_wday != $_POST['v_wday']) || ($v_cmd != $_POST['v_cmd']) &&(empty($_SESSION['error_msg']))) { - $v_min = escapeshellarg($_POST['v_min']); - $v_hour = escapeshellarg($_POST['v_hour']); - $v_day = escapeshellarg($_POST['v_day']); - $v_month = escapeshellarg($_POST['v_month']); - $v_wday = escapeshellarg($_POST['v_wday']); - $v_cmd = escapeshellarg($_POST['v_cmd']); - exec (VESTA_CMD."v-change-cron-job ".$v_username." ".$v_job." ".$v_min." ".$v_hour." ".$v_day." ".$v_month." ".$v_wday." ".$v_cmd, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - $v_cmd = $_POST['v_cmd']; - } - if (empty($_SESSION['error_msg'])) { - $_SESSION['ok_msg'] = __("Changes has been saved."); - } - } -} - +// Display body include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_cron.html'); + +// Flush session messages unset($_SESSION['error_msg']); unset($_SESSION['ok_msg']); diff --git a/web/edit/db/index.php b/web/edit/db/index.php index 435bbb17f..c64e53046 100644 --- a/web/edit/db/index.php +++ b/web/edit/db/index.php @@ -3,8 +3,8 @@ error_reporting(NULL); ob_start(); session_start(); - $TAB = 'DB'; + include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); // Header @@ -13,6 +13,7 @@ include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); // Panel top_panel($user,$TAB); +// Check database id if (empty($_GET['database'])) { header("Location: /list/db/"); exit; @@ -23,69 +24,63 @@ if (($_SESSION['user'] == 'admin') && (!empty($_GET['user']))) { $user=escapeshellarg($_GET['user']); } +// List datbase $v_database = escapeshellarg($_GET['database']); exec (VESTA_CMD."v-list-database ".$user." ".$v_database." 'json'", $output, $return_var); check_return_code($return_var,$output); -if (empty($_SESSION['error_msg'])) { - $data = json_decode(implode('', $output), true); - unset($output); +$data = json_decode(implode('', $output), true); +unset($output); + +// Parse database +$v_username = $user; +$v_database = $_GET['database']; +$v_dbuser = $data[$v_database]['DBUSER']; +$v_password = "••••••••"; +$v_host = $data[$v_database]['HOST']; +$v_type = $data[$v_database]['TYPE']; +$v_charset = $data[$v_database]['CHARSET']; +$v_date = $data[$v_database]['DATE']; +$v_time = $data[$v_database]['TIME']; +$v_suspended = $data[$v_database]['SUSPENDED']; +if ( $v_suspended == 'yes' ) { + $v_status = 'suspended'; +} else { + $v_status = 'active'; +} + +// Check POST request +if (!empty($_POST['save'])) { $v_username = $user; - $v_database = $_GET['database']; - $v_dbuser = $data[$v_database]['DBUSER']; - $v_password = "••••••••"; - $v_host = $data[$v_database]['HOST']; - $v_type = $data[$v_database]['TYPE']; - $v_charset = $data[$v_database]['CHARSET']; - $v_date = $data[$v_database]['DATE']; - $v_time = $data[$v_database]['TIME']; - $v_suspended = $data[$v_database]['SUSPENDED']; - if ( $v_suspended == 'yes' ) { - $v_status = 'suspended'; - } else { - $v_status = 'active'; + + // Change database user + if (($v_dbuser != $_POST['v_dbuser']) && (empty($_SESSION['error_msg']))) { + $v_dbuser = preg_replace("/^".$user."_/", "", $_POST['v_dbuser']); + $v_dbuser = escapeshellarg($v_dbuser); + exec (VESTA_CMD."v-change-database-user ".$v_username." ".$v_database." ".$v_dbuser, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + $v_dbuser = $user."_".preg_replace("/^".$user."_/", "", $_POST['v_dbuser']); } - // Action - if (!empty($_POST['save'])) { - $v_username = $user; + // Change database password + if (($v_password != $_POST['v_password']) && (empty($_SESSION['error_msg']))) { + $v_password = escapeshellarg($_POST['v_password']); + exec (VESTA_CMD."v-change-database-password ".$v_username." ".$v_database." ".$v_password, $output, $return_var); + check_return_code($return_var,$output); + $v_password = "••••••••"; + unset($output); + } - // Change database username - if (($v_dbuser != $_POST['v_dbuser']) && (empty($_SESSION['error_msg']))) { - $v_dbuser = preg_replace("/^".$user."_/", "", $_POST['v_dbuser']); - $v_dbuser = escapeshellarg($v_dbuser); - if ($v_password != $_POST['v_password']) { - // Change username and password - $v_password = escapeshellarg($_POST['v_password']); - exec (VESTA_CMD."v-change-database-user ".$v_username." ".$v_database." ".$v_dbuser." ".$v_password, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - $v_dbuser = $user."_".preg_replace("/^".$user."_/", "", $_POST['v_dbuser']); - $v_password = "••••••••"; - $v_pw_changed = 'yes'; - } else { - // Change only username - exec (VESTA_CMD."v-change-database-user ".$v_username." ".$v_database." ".$v_dbuser, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - $v_dbuser = $user."_".preg_replace("/^".$user."_/", "", $_POST['v_dbuser']); - } - } - - // Change only database password - if (($v_password != $_POST['v_password']) && (!isset($v_pw_changed)) && (empty($_SESSION['error_msg']))) { - $v_password = escapeshellarg($_POST['v_password']); - exec (VESTA_CMD."v-change-database-password ".$v_username." ".$v_database." ".$v_password, $output, $return_var); - check_return_code($return_var,$output); - $v_password = "••••••••"; - unset($output); - } - if (empty($_SESSION['error_msg'])) { - $_SESSION['ok_msg'] = __('Changes has been saved.'); - } + // Set success message + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('Changes has been saved.'); } } +// Display body include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_db.html'); + +// Flush session messages unset($_SESSION['error_msg']); unset($_SESSION['ok_msg']); diff --git a/web/edit/dns/index.php b/web/edit/dns/index.php index cd6a1c179..d07d1a6dd 100644 --- a/web/edit/dns/index.php +++ b/web/edit/dns/index.php @@ -3,17 +3,11 @@ error_reporting(NULL); ob_start(); session_start(); - $TAB = 'DNS'; + include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); -// Header -include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); - -// Panel -top_panel($user,$TAB); - -// Check user argument? +// Check domain name if (empty($_GET['domain'])) { header("Location: /list/dns/"); exit; @@ -24,163 +18,194 @@ if (($_SESSION['user'] == 'admin') && (!empty($_GET['user']))) { $user=escapeshellarg($_GET['user']); } -// Check domain +// List dns domain if ((!empty($_GET['domain'])) && (empty($_GET['record_id']))) { $v_domain = escapeshellarg($_GET['domain']); exec (VESTA_CMD."v-list-dns-domain ".$user." ".$v_domain." json", $output, $return_var); check_return_code($return_var,$output); + $data = json_decode(implode('', $output), true); + unset($output); + + // Parse dns domain + $v_username = $user; + $v_domain = $_GET['domain']; + $v_ip = $data[$v_domain]['IP']; + $v_template = $data[$v_domain]['TPL']; + $v_ttl = $data[$v_domain]['TTL']; + $v_exp = $data[$v_domain]['EXP']; + $v_soa = $data[$v_domain]['SOA']; + $v_date = $data[$v_domain]['DATE']; + $v_time = $data[$v_domain]['TIME']; + $v_suspended = $data[$v_domain]['SUSPENDED']; + if ( $v_suspended == 'yes' ) { + $v_status = 'suspended'; + } else { + $v_status = 'active'; + } + + // List dns templates + exec (VESTA_CMD."v-list-dns-templates json", $output, $return_var); + $templates = json_decode(implode('', $output), true); + unset($output); +} + +// List dns record +if ((!empty($_GET['domain'])) && (!empty($_GET['record_id']))) { + $v_domain = escapeshellarg($_GET['domain']); + $v_record_id = escapeshellarg($_GET['record_id']); + exec (VESTA_CMD."v-list-dns-records ".$user." ".$v_domain." 'json'", $output, $return_var); + check_return_code($return_var,$output); + $data = json_decode(implode('', $output), true); + unset($output); + + // Parse dns record + $v_username = $user; + $v_domain = $_GET['domain']; + $v_record_id = $_GET['record_id']; + $v_rec = $data[$v_record_id]['RECORD']; + $v_type = $data[$v_record_id]['TYPE']; + $v_val = $data[$v_record_id]['VALUE']; + $v_priority = $data[$v_record_id]['PRIORITY']; + $v_suspended = $data[$v_record_id]['SUSPENDED']; + if ( $v_suspended == 'yes' ) { + $v_status = 'suspended'; + } else { + $v_status = 'active'; + } + $v_date = $data[$v_record_id]['DATE']; + $v_time = $data[$v_record_id]['TIME']; +} + +// Check POST request for dns domain +if ((!empty($_POST['save'])) && (!empty($_GET['domain'])) && (empty($_GET['record_id']))) { + $v_domain = escapeshellarg($_POST['v_domain']); + + // Change domain IP + if (($v_ip != $_POST['v_ip']) && (empty($_SESSION['error_msg']))) { + $v_ip = escapeshellarg($_POST['v_ip']); + exec (VESTA_CMD."v-change-dns-domain-ip ".$v_username." ".$v_domain." ".$v_ip." 'no'", $output, $return_var); + check_return_code($return_var,$output); + $restart_dns = 'yes'; + unset($output); + } + + // Change domain template + if (($v_template != $_POST['v_template']) && (empty($_SESSION['error_msg']))) { + $v_template = escapeshellarg($_POST['v_template']); + exec (VESTA_CMD."v-change-dns-domain-tpl ".$v_username." ".$v_domain." ".$v_template." 'no'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + $restart_dns = 'yes'; + } + + // Change SOA record + if (($v_soa != $_POST['v_soa']) && (empty($_SESSION['error_msg']))) { + $v_soa = escapeshellarg($_POST['v_soa']); + exec (VESTA_CMD."v-change-dns-domain-soa ".$v_username." ".$v_domain." ".$v_soa." 'no'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + $restart_dns = 'yes'; + } + + // Change expiriation date + if (($v_exp != $_POST['v_exp']) && (empty($_SESSION['error_msg']))) { + $v_exp = escapeshellarg($_POST['v_exp']); + exec (VESTA_CMD."v-change-dns-domain-exp ".$v_username." ".$v_domain." ".$v_exp." 'no'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Change domain ttl + if (($v_ttl != $_POST['v_ttl']) && (empty($_SESSION['error_msg']))) { + $v_ttl = escapeshellarg($_POST['v_ttl']); + exec (VESTA_CMD."v-change-dns-domain-ttl ".$v_username." ".$v_domain." ".$v_ttl." 'no'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + $restart_dns = 'yes'; + } + + // Restart dns server + if (!empty($restart_dns) && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-restart-dns", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Set success message if (empty($_SESSION['error_msg'])) { - $data = json_decode(implode('', $output), true); + $_SESSION['ok_msg'] = __('Changes has been saved.'); + } +} + +// Check POST request for dns record +if ((!empty($_POST['save'])) && (!empty($_GET['domain'])) && (!empty($_GET['record_id']))) { + // Protect input + $v_domain = escapeshellarg($_POST['v_domain']); + $v_record_id = escapeshellarg($_POST['v_record_id']); + + // Change dns record + if (($v_val != $_POST['v_val']) || ($v_priority != $_POST['v_priority']) && (empty($_SESSION['error_msg']))) { + $v_val = escapeshellarg($_POST['v_val']); + $v_priority = escapeshellarg($_POST['v_priority']); + exec (VESTA_CMD."v-change-dns-record ".$v_username." ".$v_domain." ".$v_record_id." ".$v_val." ".$v_priority, $output, $return_var); + check_return_code($return_var,$output); + $v_val = $_POST['v_val']; unset($output); - $v_username = $user; - $v_domain = $_GET['domain']; - $v_ip = $data[$v_domain]['IP']; - $v_template = $data[$v_domain]['TPL']; - $v_ttl = $data[$v_domain]['TTL']; - $v_exp = $data[$v_domain]['EXP']; - $v_soa = $data[$v_domain]['SOA']; - $v_date = $data[$v_domain]['DATE']; - $v_time = $data[$v_domain]['TIME']; - $v_suspended = $data[$v_domain]['SUSPENDED']; - if ( $v_suspended == 'yes' ) { - $v_status = 'suspended'; - } else { - $v_status = 'active'; - } - exec (VESTA_CMD."v-list-dns-templates json", $output, $return_var); - $templates = json_decode(implode('', $output), true); + $restart_dns = 'yes'; + } + + // Change dns record id + if (($_GET['record_id'] != $_POST['v_record_id']) && (empty($_SESSION['error_msg']))) { + $v_old_record_id = escapeshellarg($_GET['record_id']); + exec (VESTA_CMD."v-change-dns-record-id ".$v_username." ".$v_domain." ".$v_old_record_id." ".$v_record_id, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + $restart_dns = 'yes'; + } + + // Restart dns server + if (!empty($restart_dns) && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-restart-dns", $output, $return_var); + check_return_code($return_var,$output); unset($output); } - // Action - if (!empty($_POST['save'])) { - $v_domain = escapeshellarg($_POST['v_domain']); - - // IP - if (($v_ip != $_POST['v_ip']) && (empty($_SESSION['error_msg']))) { - $v_ip = escapeshellarg($_POST['v_ip']); - exec (VESTA_CMD."v-change-dns-domain-ip ".$v_username." ".$v_domain." ".$v_ip." 'no'", $output, $return_var); - check_return_code($return_var,$output); - $restart_dns = 'yes'; - unset($output); - } - - // Template - if (( $_SESSION['user'] == 'admin') && ($v_template != $_POST['v_template']) && (empty($_SESSION['error_msg']))) { - $v_template = escapeshellarg($_POST['v_template']); - exec (VESTA_CMD."v-change-dns-domain-tpl ".$v_username." ".$v_domain." ".$v_template." 'no'", $output, $return_var); - check_return_code($return_var,$output); - unset($output); - $restart_dns = 'yes'; - } - - // SOA - if (($v_soa != $_POST['v_soa']) && (empty($_SESSION['error_msg']))) { - $v_soa = escapeshellarg($_POST['v_soa']); - exec (VESTA_CMD."v-change-dns-domain-soa ".$v_username." ".$v_domain." ".$v_soa." 'no'", $output, $return_var); - check_return_code($return_var,$output); - unset($output); - $restart_dns = 'yes'; - } - - // EXP - if (($v_exp != $_POST['v_exp']) && (empty($_SESSION['error_msg']))) { - $v_exp = escapeshellarg($_POST['v_exp']); - exec (VESTA_CMD."v-change-dns-domain-exp ".$v_username." ".$v_domain." ".$v_exp." 'no'", $output, $return_var); - check_return_code($return_var,$output); - unset($output); - $restart_dns = 'yes'; - } - - // TTL - if (($v_ttl != $_POST['v_ttl']) && (empty($_SESSION['error_msg']))) { - $v_ttl = escapeshellarg($_POST['v_ttl']); - exec (VESTA_CMD."v-change-dns-domain-ttl ".$v_username." ".$v_domain." ".$v_ttl." 'no'", $output, $return_var); - check_return_code($return_var,$output); - unset($output); - $restart_dns = 'yes'; - } - - // Restart dns - if (!empty($restart_dns) && (empty($_SESSION['error_msg']))) { - exec (VESTA_CMD."v-restart-dns", $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - - if (empty($_SESSION['error_msg'])) { - $_SESSION['ok_msg'] = __('Changes has been saved.'); - } + // Set success message + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('Changes has been saved.'); } + // Change url if record id was changed + if ((empty($_SESSION['error_msg'])) && ($_GET['record_id'] != $_POST['v_record_id'])) { + header("Location: /edit/dns/?domain=".$_GET['domain']."&record_id=".$_POST['v_record_id']); + exit; + } +} + +// Header +include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); + +// Panel +top_panel($user,$TAB); + +// Display body for dns domain +if ((!empty($_GET['domain'])) && (empty($_GET['record_id']))) { if ($_SESSION['user'] == 'admin') { include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_dns.html'); } else { include($_SERVER['DOCUMENT_ROOT'].'/templates/user/edit_dns.html'); } - unset($_SESSION['error_msg']); - unset($_SESSION['ok_msg']); -} else { - $v_domain = escapeshellarg($_GET['domain']); - $v_record_id = escapeshellarg($_GET['record_id']); - exec (VESTA_CMD."v-list-dns-records ".$user." ".$v_domain." 'json'", $output, $return_var); - check_return_code($return_var,$output); - if (empty($_SESSION['error_msg'])) { - $data = json_decode(implode('', $output), true); - unset($output); - $v_username = $user; - $v_domain = $_GET['domain']; - $v_record_id = $_GET['record_id']; - $v_rec = $data[$v_record_id]['RECORD']; - $v_type = $data[$v_record_id]['TYPE']; - $v_val = $data[$v_record_id]['VALUE']; - $v_priority = $data[$v_record_id]['PRIORITY']; - $v_suspended = $data[$v_record_id]['SUSPENDED']; - if ( $v_suspended == 'yes' ) { - $v_status = 'suspended'; - } else { - $v_status = 'active'; - } - $v_date = $data[$v_record_id]['DATE']; - $v_time = $data[$v_record_id]['TIME']; - } - - // Action - if (!empty($_POST['save'])) { - $v_domain = escapeshellarg($_POST['v_domain']); - $v_record_id = escapeshellarg($_POST['v_record_id']); - if (($v_val != $_POST['v_val']) || ($v_priority != $_POST['v_priority']) && (empty($_SESSION['error_msg']))) { - $v_val = escapeshellarg($_POST['v_val']); - $v_priority = escapeshellarg($_POST['v_priority']); - exec (VESTA_CMD."v-change-dns-record ".$v_username." ".$v_domain." ".$v_record_id." ".$v_val." ".$v_priority, $output, $return_var); - check_return_code($return_var,$output); - $v_val = $_POST['v_val']; - $restart_dns = 'yes'; - unset($output); - } - - if (($_GET['record_id'] != $_POST['v_record_id']) && (empty($_SESSION['error_msg']))) { - $v_old_record_id = escapeshellarg($_GET['record_id']); - exec (VESTA_CMD."v-change-dns-record-id ".$v_username." ".$v_domain." ".$v_old_record_id." ".$v_record_id, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - - if (empty($_SESSION['error_msg'])) { - $_SESSION['ok_msg'] = __('Changes has been saved.'); - } - - if ((empty($_SESSION['error_msg'])) && ($_GET['record_id'] != $_POST['v_record_id'])) { - header("Location: /edit/dns/?domain=".$_GET['domain']."&record_id=".$_POST['v_record_id']); - exit; - } - } - - include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_dns_rec.html'); - unset($_SESSION['error_msg']); - unset($_SESSION['ok_msg']); } +// List dns record +if ((!empty($_GET['domain'])) && (!empty($_GET['record_id']))) { + // Display body for dns record + include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_dns_rec.html'); +} + +// Flush session messages +unset($_SESSION['error_msg']); +unset($_SESSION['ok_msg']); // Footer include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); diff --git a/web/edit/ip/index.php b/web/edit/ip/index.php index c6cdf2de9..bec1ae58f 100644 --- a/web/edit/ip/index.php +++ b/web/edit/ip/index.php @@ -3,107 +3,114 @@ error_reporting(NULL); ob_start(); session_start(); - $TAB = 'IP'; + include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); +// Check user +if ($_SESSION['user'] != 'admin') { + header("Location: /list/user"); + exit; +} + +// Check ip argument +if (empty($_GET['ip'])) { + header("Location: /list/ip/"); + exit; +} + +// List ip +$v_ip = escapeshellarg($_GET['ip']); +exec (VESTA_CMD."v-list-sys-ip ".$v_ip." 'json'", $output, $return_var); +check_return_code($return_var,$output); +$data = json_decode(implode('', $output), true); +unset($output); + +// Parse ip +$v_username = $user; +$v_ip = $_GET['ip']; +$v_netmask = $data[$v_ip]['NETMASK']; +$v_interace = $data[$v_ip]['INTERFACE']; +$v_name = $data[$v_ip]['NAME']; +$v_nat = $data[$v_ip]['NAT']; +$v_ipstatus = $data[$v_ip]['STATUS']; +if ($v_ipstatus == 'dedicated') $v_dedicated = 'yes'; +$v_owner = $data[$v_ip]['OWNER']; +$v_date = $data[$v_ip]['DATE']; +$v_time = $data[$v_ip]['TIME']; +$v_suspended = $data[$v_ip]['SUSPENDED']; +if ( $v_suspended == 'yes' ) { + $v_status = 'suspended'; +} else { + $v_status = 'active'; +} + +// List users +exec (VESTA_CMD."v-list-sys-users 'json'", $output, $return_var); +$users = json_decode(implode('', $output), true); +unset($output); + +// Check POST request +if (!empty($_POST['save'])) { + $v_ip = escapeshellarg($_POST['v_ip']); + + // Change Status + if (($v_ipstatus == 'shared') && (empty($_POST['v_shared'])) && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-change-sys-ip-status ".$v_ip." 'dedicated'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + $v_dedicated = 'yes'; + } + if (($v_ipstatus == 'dedicated') && (!empty($_POST['v_shared'])) && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-change-sys-ip-status ".$v_ip." 'shared'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + unset($v_dedicated); + } + + // Change owner + if (($v_owner != $_POST['v_owner']) && (empty($_SESSION['error_msg']))) { + $v_owner = escapeshellarg($_POST['v_owner']); + exec (VESTA_CMD."v-change-sys-ip-owner ".$v_ip." ".$v_owner, $output, $return_var); + check_return_code($return_var,$output); + $v_owner = $_POST['v_owner']; + unset($output); + } + + // Change associated domain + if (($v_name != $_POST['v_name']) && (empty($_SESSION['error_msg']))) { + $v_name = escapeshellarg($_POST['v_name']); + exec (VESTA_CMD."v-change-sys-ip-name ".$v_ip." ".$v_name, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Change NAT address + if (($v_nat != $_POST['v_nat']) && (empty($_SESSION['error_msg']))) { + $v_nat = escapeshellarg($_POST['v_nat']); + exec (VESTA_CMD."v-change-sys-ip-nat ".$v_ip." ".$v_nat, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Set success message + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('Changes has been saved.'); + } +} + // Header include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); // Panel top_panel($user,$TAB); -// Are you admin? -if ($_SESSION['user'] == 'admin') { +// Display body +include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_ip.html'); - // Check user argument? - if (empty($_GET['ip'])) { - header("Location: /list/ip/"); - exit; - } - - $v_ip = escapeshellarg($_GET['ip']); - exec (VESTA_CMD."v-list-sys-ip ".$v_ip." 'json'", $output, $return_var); - check_return_code($return_var,$output); - if (empty($_SESSION['error_msg'])) { - $data = json_decode(implode('', $output), true); - unset($output); - $v_username = $user; - $v_ip = $_GET['ip']; - $v_netmask = $data[$v_ip]['NETMASK']; - $v_interace = $data[$v_ip]['INTERFACE']; - $v_name = $data[$v_ip]['NAME']; - $v_nat = $data[$v_ip]['NAT']; - $v_ipstatus = $data[$v_ip]['STATUS']; - if ($v_ipstatus == 'dedicated') $v_dedicated = 'yes'; - $v_owner = $data[$v_ip]['OWNER']; - $v_date = $data[$v_ip]['DATE']; - $v_time = $data[$v_ip]['TIME']; - $v_suspended = $data[$v_ip]['SUSPENDED']; - if ( $v_suspended == 'yes' ) { - $v_status = 'suspended'; - } else { - $v_status = 'active'; - } - - exec (VESTA_CMD."v-list-sys-users 'json'", $output, $return_var); - $users = json_decode(implode('', $output), true); - unset($output); - - // Action - if (!empty($_POST['save'])) { - $v_username = $user; - $v_ip = escapeshellarg($_POST['v_ip']); - - // Change Status - if (($v_ipstatus == 'shared') && (empty($_POST['v_shared'])) && (empty($_SESSION['error_msg']))) { - exec (VESTA_CMD."v-change-sys-ip-status ".$v_ip." 'dedicated'", $output, $return_var); - check_return_code($return_var,$output); - unset($output); - $v_dedicated = 'yes'; - } - if (($v_ipstatus == 'dedicated') && (!empty($_POST['v_shared'])) && (empty($_SESSION['error_msg']))) { - exec (VESTA_CMD."v-change-sys-ip-status ".$v_ip." 'shared'", $output, $return_var); - check_return_code($return_var,$output); - unset($output); - unset($v_dedicated); - } - - // Change owner - if (($v_owner != $_POST['v_owner']) && (empty($_SESSION['error_msg']))) { - $v_owner = escapeshellarg($_POST['v_owner']); - exec (VESTA_CMD."v-change-sys-ip-owner ".$v_ip." ".$v_owner, $output, $return_var); - check_return_code($return_var,$output); - $v_owner = $_POST['v_owner']; - unset($output); - } - - // Change Name - if (($v_name != $_POST['v_name']) && (empty($_SESSION['error_msg']))) { - $v_name = escapeshellarg($_POST['v_name']); - exec (VESTA_CMD."v-change-sys-ip-name ".$v_ip." ".$v_name, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - - // Change Nat - if (($v_nat != $_POST['v_nat']) && (empty($_SESSION['error_msg']))) { - $v_nat = escapeshellarg($_POST['v_nat']); - exec (VESTA_CMD."v-change-sys-ip-nat ".$v_ip." ".$v_nat, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - - if (empty($_SESSION['error_msg'])) { - $_SESSION['ok_msg'] = __('Changes has been saved.'); - } - } - } - - include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_ip.html'); - unset($_SESSION['error_msg']); - unset($_SESSION['ok_msg']); -} +// Flush session messages +unset($_SESSION['error_msg']); +unset($_SESSION['ok_msg']); // Footer include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); diff --git a/web/edit/mail/index.php b/web/edit/mail/index.php index c70c6c896..6ff029351 100644 --- a/web/edit/mail/index.php +++ b/web/edit/mail/index.php @@ -3,8 +3,8 @@ error_reporting(NULL); ob_start(); session_start(); - $TAB = 'MAIL'; + include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); // Header @@ -13,7 +13,7 @@ include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); // Panel top_panel($user,$TAB); -// Check user argument? +// Check domain argument if (empty($_GET['domain'])) { header("Location: /list/mail/"); exit; @@ -23,272 +23,289 @@ if (empty($_GET['domain'])) { if (($_SESSION['user'] == 'admin') && (!empty($_GET['user']))) { $user=escapeshellarg($_GET['user']); } +$v_username = $user; -// Check domain +// List mail domain if ((!empty($_GET['domain'])) && (empty($_GET['account']))) { $v_domain = escapeshellarg($_GET['domain']); exec (VESTA_CMD."v-list-mail-domain ".$user." ".$v_domain." json", $output, $return_var); - check_return_code($return_var,$output); - if (empty($_SESSION['error_msg'])) { - $data = json_decode(implode('', $output), true); - unset($output); - $v_username = $user; - $v_domain = $_GET['domain']; - $v_antispam = $data[$v_domain]['ANTISPAM']; - $v_antivirus = $data[$v_domain]['ANTIVIRUS']; - $v_dkim = $data[$v_domain]['DKIM']; - $v_catchall = $data[$v_domain]['CATCHALL']; - $v_date = $data[$v_domain]['DATE']; - $v_time = $data[$v_domain]['TIME']; - $v_suspended = $data[$v_domain]['SUSPENDED']; - if ( $v_suspended == 'yes' ) { - $v_status = 'suspended'; - } else { - $v_status = 'active'; - } + $data = json_decode(implode('', $output), true); + unset($output); + + // Parse domain + $v_domain = $_GET['domain']; + $v_antispam = $data[$v_domain]['ANTISPAM']; + $v_antivirus = $data[$v_domain]['ANTIVIRUS']; + $v_dkim = $data[$v_domain]['DKIM']; + $v_catchall = $data[$v_domain]['CATCHALL']; + $v_date = $data[$v_domain]['DATE']; + $v_time = $data[$v_domain]['TIME']; + $v_suspended = $data[$v_domain]['SUSPENDED']; + if ( $v_suspended == 'yes' ) { + $v_status = 'suspended'; + } else { + $v_status = 'active'; } +} - // Action - if (!empty($_POST['save'])) { - $v_domain = escapeshellarg($_POST['v_domain']); - // Antispam - if (($v_antispam == 'yes') && (empty($_POST['v_antispam'])) && (empty($_SESSION['error_msg']))) { - exec (VESTA_CMD."v-delete-mail-domain-antispam ".$v_username." ".$v_domain, $output, $return_var); - check_return_code($return_var,$output); - $v_antispam = 'no'; - unset($output); - } - if (($v_antispam == 'no') && (!empty($_POST['v_antispam'])) && (empty($_SESSION['error_msg']))) { - exec (VESTA_CMD."v-add-mail-domain-antispam ".$v_username." ".$v_domain, $output, $return_var); - check_return_code($return_var,$output); - $v_antispam = 'yes'; - unset($output); - } - // Antivirus - if (($v_antivirus == 'yes') && (empty($_POST['v_antivirus'])) && (empty($_SESSION['error_msg']))) { - exec (VESTA_CMD."v-delete-mail-domain-antivirus ".$v_username." ".$v_domain, $output, $return_var); - check_return_code($return_var,$output); - $v_antivirus = 'no'; - unset($output); - } - if (($v_antivirus == 'no') && (!empty($_POST['v_antivirus'])) && (empty($_SESSION['error_msg']))) { - exec (VESTA_CMD."v-add-mail-domain-antivirus ".$v_username." ".$v_domain, $output, $return_var); - check_return_code($return_var,$output); - $v_antivirus = 'yes'; - unset($output); - } - if (empty($_SESSION['error_msg'])) { - $_SESSION['ok_msg'] = __('Changes has been saved.'); - } - - // DKIM - if (($v_dkim == 'yes') && (empty($_POST['v_dkim'])) && (empty($_SESSION['error_msg']))) { - exec (VESTA_CMD."v-delete-mail-domain-dkim ".$v_username." ".$v_domain, $output, $return_var); - check_return_code($return_var,$output); - $v_dkim = 'no'; - unset($output); - } - if (($v_dkim == 'no') && (!empty($_POST['v_dkim'])) && (empty($_SESSION['error_msg']))) { - exec (VESTA_CMD."v-add-mail-domain-dkim ".$v_username." ".$v_domain, $output, $return_var); - check_return_code($return_var,$output); - $v_dkim = 'yes'; - unset($output); - } - - // Catchall - if ((!empty($v_catchall)) && (empty($_POST['v_catchall'])) && (empty($_SESSION['error_msg']))) { - exec (VESTA_CMD."v-delete-mail-domain-catchall ".$v_username." ".$v_domain, $output, $return_var); - check_return_code($return_var,$output); - $v_catchall = ''; - unset($output); - } - if ((!empty($v_catchall)) && (!empty($_POST['v_catchall'])) && (empty($_SESSION['error_msg']))) { - if ($v_catchall != $_POST['v_catchall']) { - $v_catchall = escapeshellarg($_POST['v_catchall']); - exec (VESTA_CMD."v-change-mail-domain-catchall ".$v_username." ".$v_domain." ".$v_catchall, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - } - if ((empty($v_catchall)) && (!empty($_POST['v_catchall'])) && (empty($_SESSION['error_msg']))) { - $v_catchall = escapeshellarg($_POST['v_catchall']); - exec (VESTA_CMD."v-add-mail-domain-catchall ".$v_username." ".$v_domain." ".$v_catchall, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - if (empty($_SESSION['error_msg'])) { - $_SESSION['ok_msg'] = __('Changes has been saved.'); - } - } - include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_mail.html'); - unset($_SESSION['error_msg']); - unset($_SESSION['ok_msg']); -} else { - $v_username = $user; +// List mail account +if ((!empty($_GET['domain'])) && (!empty($_GET['account']))) { $v_domain = escapeshellarg($_GET['domain']); $v_account = escapeshellarg($_GET['account']); exec (VESTA_CMD."v-list-mail-account ".$user." ".$v_domain." ".$v_account." 'json'", $output, $return_var); - check_return_code($return_var,$output); - if (empty($_SESSION['error_msg'])) { - $data = json_decode(implode('', $output), true); + $data = json_decode(implode('', $output), true); + unset($output); + + // Parse mail account + $v_username = $user; + $v_domain = $_GET['domain']; + $v_account = $_GET['account']; + $v_password = "••••••••"; + $v_aliases = str_replace(',', "\n", $data[$v_account]['ALIAS']); + $valiases = explode(",", $data[$v_account]['ALIAS']); + $v_fwd = str_replace(',', "\n", $data[$v_account]['FWD']); + $vfwd = explode(",", $data[$v_account]['FWD']); + $v_fwd_only = $data[$v_account]['FWD_ONLY']; + $v_quota = $data[$v_account]['QUOTA']; + $v_autoreply = $data[$v_account]['AUTOREPLY']; + $v_suspended = $data[$v_account]['SUSPENDED']; + if ( $v_suspended == 'yes' ) { + $v_status = 'suspended'; + } else { + $v_status = 'active'; + } + $v_date = $data[$v_account]['DATE']; + $v_time = $data[$v_account]['TIME']; + + // Parse autoreply + if ( $v_autoreply == 'yes' ) { + exec (VESTA_CMD."v-list-mail-account-autoreply ".$user." '".$v_domain."' '".$v_account."' json", $output, $return_var); + $autoreply_str = json_decode(implode('', $output), true); unset($output); - $v_username = $user; - $v_domain = $_GET['domain']; - $v_account = $_GET['account']; - $v_password = "••••••••"; - $v_aliases = str_replace(',', "\n", $data[$v_account]['ALIAS']); - $valiases = explode(",", $data[$v_account]['ALIAS']); - $v_fwd = str_replace(',', "\n", $data[$v_account]['FWD']); - $vfwd = explode(",", $data[$v_account]['FWD']); - $v_fwd_only = $data[$v_account]['FWD_ONLY']; - $v_quota = $data[$v_account]['QUOTA']; - $v_autoreply = $data[$v_account]['AUTOREPLY']; - if ( $v_autoreply == 'yes' ) { - exec (VESTA_CMD."v-list-mail-account-autoreply ".$user." '".$v_domain."' '".$v_account."' json", $output, $return_var); - $autoreply_str = json_decode(implode('', $output), true); - unset($output); - $v_autoreply_message = $autoreply_str[$v_account]['MSG']; - } - $v_suspended = $data[$v_account]['SUSPENDED']; - if ( $v_suspended == 'yes' ) { - $v_status = 'suspended'; - } else { - $v_status = 'active'; - } - $v_date = $data[$v_account]['DATE']; - $v_time = $data[$v_account]['TIME']; + $v_autoreply_message = $autoreply_str[$v_account]['MSG']; } - - // Action - if (!empty($_POST['save'])) { - $v_domain = escapeshellarg($_POST['v_domain']); - $v_account = escapeshellarg($_POST['v_account']); - // Password - if (($v_password != $_POST['v_password']) && (empty($_SESSION['error_msg']))) { - $v_password = escapeshellarg($_POST['v_password']); - exec (VESTA_CMD."v-change-mail-account-password ".$v_username." ".$v_domain." ".$v_account." ".$v_password, $output, $return_var); - check_return_code($return_var,$output); - $v_password = "••••••••"; - unset($output); - } - - // Quota - if (($v_quota != $_POST['v_quota']) && (empty($_SESSION['error_msg']))) { - if (empty($_POST['v_quota'])) { - $v_quota = 0; - } else { - $v_quota = escapeshellarg($_POST['v_quota']); - } - exec (VESTA_CMD."v-change-mail-account-quota ".$v_username." ".$v_domain." ".$v_account." ".$v_quota, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - - // Aliases - if (empty($_SESSION['error_msg'])) { - $waliases = preg_replace("/\n/", " ", $_POST['v_aliases']); - $waliases = preg_replace("/,/", " ", $waliases); - $waliases = preg_replace('/\s+/', ' ',$waliases); - $waliases = trim($waliases); - $aliases = explode(" ", $waliases); - $v_aliases = str_replace(' ', "\n", $waliases); - $result = array_diff($valiases, $aliases); - foreach ($result as $alias) { - if ((empty($_SESSION['error_msg'])) && (!empty($alias))) { - exec (VESTA_CMD."v-delete-mail-account-alias ".$v_username." ".$v_domain." ".$v_account." '".$alias."'", $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - } - $result = array_diff($aliases, $valiases); - foreach ($result as $alias) { - if ((empty($_SESSION['error_msg'])) && (!empty($alias))) { - exec (VESTA_CMD."v-add-mail-account-alias ".$v_username." ".$v_domain." ".$v_account." '".$alias."'", $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - } - } - // Forwarders - if (empty($_SESSION['error_msg'])) { - $wfwd = preg_replace("/\n/", " ", $_POST['v_fwd']); - $wfwd = preg_replace("/,/", " ", $wfwd); - $wfwd = preg_replace('/\s+/', ' ',$wfwd); - $wfwd = trim($wfwd); - $fwd = explode(" ", $wfwd); - $v_fwd = str_replace(' ', "\n", $wfwd); - $result = array_diff($vfwd, $fwd); - foreach ($result as $forward) { - if ((empty($_SESSION['error_msg'])) && (!empty($forward))) { - exec (VESTA_CMD."v-delete-mail-account-forward ".$v_username." ".$v_domain." ".$v_account." '".$forward."'", $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - } - $result = array_diff($fwd, $vfwd); - foreach ($result as $forward) { - if ((empty($_SESSION['error_msg'])) && (!empty($forward))) { - exec (VESTA_CMD."v-add-mail-account-forward ".$v_username." ".$v_domain." ".$v_account." '".$forward."'", $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - } - } - - // FWD_ONLY flag - if (($v_fwd_only == 'yes') && (empty($_POST['v_fwd_only'])) && (empty($_SESSION['error_msg']))) { - exec (VESTA_CMD."v-delete-mail-account-fwd-only ".$v_username." ".$v_domain." ".$v_account, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - $v_fwd_only = ''; - } - if (($v_fwd_only != 'yes') && (!empty($_POST['v_fwd_only'])) && (empty($_SESSION['error_msg']))) { - exec (VESTA_CMD."v-add-mail-account-fwd-only ".$v_username." ".$v_domain." ".$v_account, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - $v_fwd_only = 'yes'; - } - - // Autoreply - if (($v_autoreply == 'yes') && (empty($_POST['v_autoreply'])) && (empty($_SESSION['error_msg']))) { - exec (VESTA_CMD."v-delete-mail-account-autoreply ".$v_username." ".$v_domain." ".$v_account, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - $v_autoreply = 'no'; - $v_autoreply_message = ''; - } - if (($v_autoreply == 'yes') && (!empty($_POST['v_autoreply'])) && (empty($_SESSION['error_msg']))) { - if ( $v_autoreply_message != str_replace("\r\n", "\n", $_POST['v_autoreply_message'])) { - $v_autoreply_message = str_replace("\r\n", "\n", $_POST['v_autoreply_message']); - $v_autoreply_message = escapeshellarg($v_autoreply_message); - exec (VESTA_CMD."v-add-mail-account-autoreply ".$v_username." ".$v_domain." ".$v_account." ".$v_autoreply_message, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - $v_autoreply_message = $_POST['v_autoreply_message']; - } - } - if (($v_autoreply == 'no') && (!empty($_POST['v_autoreply'])) && (empty($_SESSION['error_msg']))) { - if (empty($_POST['v_autoreply_message'])) $_SESSION['error_msg'] = $_SESSION['error_msg'] = __('Field "%s" can not be blank.','atoreply'); - if (empty($_SESSION['error_msg'])) { - $v_autoreply_message = str_replace("\r\n", "\n", $_POST['v_autoreply_message']); - $v_autoreply_message = escapeshellarg($v_autoreply_message); - exec (VESTA_CMD."v-add-mail-account-autoreply ".$v_username." ".$v_domain." ".$v_account." ".$v_autoreply_message, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - $v_autoreply = 'yes'; - $v_autoreply_message = $_POST['v_autoreply_message']; - } - } - - if (empty($_SESSION['error_msg'])) { - $_SESSION['ok_msg'] = __('Changes has been saved.'); - } - } - include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_mail_acc.html'); - unset($_SESSION['error_msg']); - unset($_SESSION['ok_msg']); } +// Check POST request for mail domain +if ((!empty($_POST['save'])) && (!empty($_GET['domain'])) && (empty($_GET['account']))) { + $v_domain = escapeshellarg($_POST['v_domain']); + + // Delete antispam + if (($v_antispam == 'yes') && (empty($_POST['v_antispam'])) && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-delete-mail-domain-antispam ".$v_username." ".$v_domain, $output, $return_var); + check_return_code($return_var,$output); + $v_antispam = 'no'; + unset($output); + } + + // Add antispam + if (($v_antispam == 'no') && (!empty($_POST['v_antispam'])) && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-add-mail-domain-antispam ".$v_username." ".$v_domain, $output, $return_var); + check_return_code($return_var,$output); + $v_antispam = 'yes'; + unset($output); + } + + // Delete antivirus + if (($v_antivirus == 'yes') && (empty($_POST['v_antivirus'])) && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-delete-mail-domain-antivirus ".$v_username." ".$v_domain, $output, $return_var); + check_return_code($return_var,$output); + $v_antivirus = 'no'; + unset($output); + } + + // Add antivirs + if (($v_antivirus == 'no') && (!empty($_POST['v_antivirus'])) && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-add-mail-domain-antivirus ".$v_username." ".$v_domain, $output, $return_var); + check_return_code($return_var,$output); + $v_antivirus = 'yes'; + unset($output); + } + + // Delete DKIM + if (($v_dkim == 'yes') && (empty($_POST['v_dkim'])) && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-delete-mail-domain-dkim ".$v_username." ".$v_domain, $output, $return_var); + check_return_code($return_var,$output); + $v_dkim = 'no'; + unset($output); + } + + // Add DKIM + if (($v_dkim == 'no') && (!empty($_POST['v_dkim'])) && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-add-mail-domain-dkim ".$v_username." ".$v_domain, $output, $return_var); + check_return_code($return_var,$output); + $v_dkim = 'yes'; + unset($output); + } + + // Delete catchall + if ((!empty($v_catchall)) && (empty($_POST['v_catchall'])) && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-delete-mail-domain-catchall ".$v_username." ".$v_domain, $output, $return_var); + check_return_code($return_var,$output); + $v_catchall = ''; + unset($output); + } + + // Change catchall address + if ((!empty($v_catchall)) && (!empty($_POST['v_catchall'])) && (empty($_SESSION['error_msg']))) { + if ($v_catchall != $_POST['v_catchall']) { + $v_catchall = escapeshellarg($_POST['v_catchall']); + exec (VESTA_CMD."v-change-mail-domain-catchall ".$v_username." ".$v_domain." ".$v_catchall, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + } + + // Add catchall + if ((empty($v_catchall)) && (!empty($_POST['v_catchall'])) && (empty($_SESSION['error_msg']))) { + $v_catchall = escapeshellarg($_POST['v_catchall']); + exec (VESTA_CMD."v-add-mail-domain-catchall ".$v_username." ".$v_domain." ".$v_catchall, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Set success message + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('Changes has been saved.'); + } +} + +// Check POST request for mail account +if ((!empty($_POST['save'])) && (!empty($_GET['domain'])) && (!empty($_GET['account']))) { + $v_domain = escapeshellarg($_POST['v_domain']); + $v_account = escapeshellarg($_POST['v_account']); + + // Change password + if (($v_password != $_POST['v_password']) && (empty($_SESSION['error_msg']))) { + $v_password = escapeshellarg($_POST['v_password']); + exec (VESTA_CMD."v-change-mail-account-password ".$v_username." ".$v_domain." ".$v_account." ".$v_password, $output, $return_var); + check_return_code($return_var,$output); + $v_password = "••••••••"; + unset($output); + } + + // Change quota + if (($v_quota != $_POST['v_quota']) && (empty($_SESSION['error_msg']))) { + if (empty($_POST['v_quota'])) { + $v_quota = 0; + } else { + $v_quota = escapeshellarg($_POST['v_quota']); + } + exec (VESTA_CMD."v-change-mail-account-quota ".$v_username." ".$v_domain." ".$v_account." ".$v_quota, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Change account aliases + if (empty($_SESSION['error_msg'])) { + $waliases = preg_replace("/\n/", " ", $_POST['v_aliases']); + $waliases = preg_replace("/,/", " ", $waliases); + $waliases = preg_replace('/\s+/', ' ',$waliases); + $waliases = trim($waliases); + $aliases = explode(" ", $waliases); + $v_aliases = str_replace(' ', "\n", $waliases); + $result = array_diff($valiases, $aliases); + foreach ($result as $alias) { + if ((empty($_SESSION['error_msg'])) && (!empty($alias))) { + exec (VESTA_CMD."v-delete-mail-account-alias ".$v_username." ".$v_domain." ".$v_account." '".$alias."'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + } + $result = array_diff($aliases, $valiases); + foreach ($result as $alias) { + if ((empty($_SESSION['error_msg'])) && (!empty($alias))) { + exec (VESTA_CMD."v-add-mail-account-alias ".$v_username." ".$v_domain." ".$v_account." '".$alias."'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + } + } + + // Change forwarders + if (empty($_SESSION['error_msg'])) { + $wfwd = preg_replace("/\n/", " ", $_POST['v_fwd']); + $wfwd = preg_replace("/,/", " ", $wfwd); + $wfwd = preg_replace('/\s+/', ' ',$wfwd); + $wfwd = trim($wfwd); + $fwd = explode(" ", $wfwd); + $v_fwd = str_replace(' ', "\n", $wfwd); + $result = array_diff($vfwd, $fwd); + foreach ($result as $forward) { + if ((empty($_SESSION['error_msg'])) && (!empty($forward))) { + exec (VESTA_CMD."v-delete-mail-account-forward ".$v_username." ".$v_domain." ".$v_account." '".$forward."'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + } + $result = array_diff($fwd, $vfwd); + foreach ($result as $forward) { + if ((empty($_SESSION['error_msg'])) && (!empty($forward))) { + exec (VESTA_CMD."v-add-mail-account-forward ".$v_username." ".$v_domain." ".$v_account." '".$forward."'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + } + } + + // Delete FWD_ONLY flag + if (($v_fwd_only == 'yes') && (empty($_POST['v_fwd_only'])) && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-delete-mail-account-fwd-only ".$v_username." ".$v_domain." ".$v_account, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + $v_fwd_only = ''; + } + + // Add FWD_ONLY flag + if (($v_fwd_only != 'yes') && (!empty($_POST['v_fwd_only'])) && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-add-mail-account-fwd-only ".$v_username." ".$v_domain." ".$v_account, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + $v_fwd_only = 'yes'; + } + + // Delete autoreply + if (($v_autoreply == 'yes') && (empty($_POST['v_autoreply'])) && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-delete-mail-account-autoreply ".$v_username." ".$v_domain." ".$v_account, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + $v_autoreply = 'no'; + $v_autoreply_message = ''; + } + + // Add autoreply + if ((!empty($_POST['v_autoreply'])) && (empty($_SESSION['error_msg']))) { + if ( $v_autoreply_message != str_replace("\r\n", "\n", $_POST['v_autoreply_message'])) { + $v_autoreply_message = str_replace("\r\n", "\n", $_POST['v_autoreply_message']); + $v_autoreply_message = escapeshellarg($v_autoreply_message); + exec (VESTA_CMD."v-add-mail-account-autoreply ".$v_username." ".$v_domain." ".$v_account." ".$v_autoreply_message, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + $v_autoreply = 'yes'; + $v_autoreply_message = $_POST['v_autoreply_message']; + } + } + + // Set success message + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('Changes has been saved.'); + } +} + +// Display body for mail domain +if ((!empty($_GET['domain'])) && (empty($_GET['account']))) { + include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_mail.html'); +} + +// Display body for mail account +if ((!empty($_GET['domain'])) && (!empty($_GET['account']))) { + include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_mail_acc.html'); +} + +// Flush session messages +unset($_SESSION['error_msg']); +unset($_SESSION['ok_msg']); + // Footer include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); diff --git a/web/edit/package/index.php b/web/edit/package/index.php index 2347aa261..41b3640b6 100644 --- a/web/edit/package/index.php +++ b/web/edit/package/index.php @@ -3,196 +3,199 @@ error_reporting(NULL); ob_start(); session_start(); - $TAB = 'PACKAGE'; + include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); + +// Check user +if ($_SESSION['user'] != 'admin') { + header("Location: /list/user"); + exit; +} + +// Check package argument +if (empty($_GET['package'])) { + header("Location: /list/package/"); + exit; +} + + +// List package +$v_package = escapeshellarg($_GET['package']); +exec (VESTA_CMD."v-list-user-package ".$v_package." 'json'", $output, $return_var); +$data = json_decode(implode('', $output), true); +unset($output); + +// Parse package +$v_package = $_GET['package']; +$v_web_template = $data[$v_package]['WEB_TEMPLATE']; +$v_proxy_template = $data[$v_package]['PROXY_TEMPLATE']; +$v_dns_template = $data[$v_package]['DNS_TEMPLATE']; +$v_web_domains = $data[$v_package]['WEB_DOMAINS']; +$v_web_aliases = $data[$v_package]['WEB_ALIASES']; +$v_dns_domains = $data[$v_package]['DNS_DOMAINS']; +$v_dns_records = $data[$v_package]['DNS_RECORDS']; +$v_mail_domains = $data[$v_package]['MAIL_DOMAINS']; +$v_mail_accounts = $data[$v_package]['MAIL_ACCOUNTS']; +$v_databases = $data[$v_package]['DATABASES']; +$v_cron_jobs = $data[$v_package]['CRON_JOBS']; +$v_disk_quota = $data[$v_package]['DISK_QUOTA']; +$v_bandwidth = $data[$v_package]['BANDWIDTH']; +$v_shell = $data[$v_package]['SHELL']; +$v_ns = $data[$v_package]['NS']; +$nameservers = explode(", ", $v_ns); +$v_ns1 = $nameservers[0]; +$v_ns2 = $nameservers[1]; +$v_ns3 = $nameservers[2]; +$v_ns4 = $nameservers[3]; +$v_backups = $data[$v_package]['BACKUPS']; +$v_date = $data[$v_package]['DATE']; +$v_time = $data[$v_package]['TIME']; +$v_status = 'active'; + +// List web templates +exec (VESTA_CMD."v-list-web-templates json", $output, $return_var); +$web_templates = json_decode(implode('', $output), true); +unset($output); + +// List proxy templates +exec (VESTA_CMD."v-list-web-templates-proxy json", $output, $return_var); +$proxy_templates = json_decode(implode('', $output), true); +unset($output); + +// List dns templates +exec (VESTA_CMD."v-list-dns-templates json", $output, $return_var); +$dns_templates = json_decode(implode('', $output), true); +unset($output); + +// List shels +exec (VESTA_CMD."v-list-sys-shells json", $output, $return_var); +$shells = json_decode(implode('', $output), true); +unset($output); + +// Check POST request +if (!empty($_POST['save'])) { + + // Check empty fields + if (empty($_POST['v_package'])) $errors[] = __('package'); + if (empty($_POST['v_web_template'])) $errors[] = __('web template'); + if (empty($_POST['v_proxy_template'])) $errors[] = __('proxy template'); + if (empty($_POST['v_dns_template'])) $errors[] = __('dns template'); + if (empty($_POST['v_shell'])) $errrors[] = __('shell'); + if (!isset($_POST['v_web_domains'])) $errors[] = __('web domains'); + if (!isset($_POST['v_web_aliases'])) $errors[] = __('web aliases'); + if (!isset($_POST['v_dns_domains'])) $errors[] = __('dns domains'); + if (!isset($_POST['v_dns_records'])) $errors[] = __('dns records'); + if (!isset($_POST['v_mail_domains'])) $errors[] = __('mail domains'); + if (!isset($_POST['v_mail_accounts'])) $errors[] = __('mail accounts'); + if (!isset($_POST['v_databases'])) $errors[] = __('databases'); + if (!isset($_POST['v_cron_jobs'])) $errors[] = __('cron jobs'); + if (!isset($_POST['v_backups'])) $errors[] = __('backups'); + if (!isset($_POST['v_disk_quota'])) $errors[] = __('quota'); + if (!isset($_POST['v_bandwidth'])) $errors[] = __('bandwidth'); + if (empty($_POST['v_ns1'])) $errors[] = __('ns1'); + if (empty($_POST['v_ns2'])) $errors[] = __('ns2'); + if (!empty($errors[0])) { + foreach ($errors as $i => $error) { + if ( $i == 0 ) { + $error_msg = $error; + } else { + $error_msg = $error_msg.", ".$error; + } + } + $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); + } + + // Protect input + $v_package = escapeshellarg($_POST['v_package']); + $v_web_template = escapeshellarg($_POST['v_web_template']); + $v_proxy_template = escapeshellarg($_POST['v_proxy_template']); + $v_dns_template = escapeshellarg($_POST['v_dns_template']); + $v_shell = escapeshellarg($_POST['v_shell']); + $v_web_domains = escapeshellarg($_POST['v_web_domains']); + $v_web_aliases = escapeshellarg($_POST['v_web_aliases']); + $v_dns_domains = escapeshellarg($_POST['v_dns_domains']); + $v_dns_records = escapeshellarg($_POST['v_dns_records']); + $v_mail_domains = escapeshellarg($_POST['v_mail_domains']); + $v_mail_accounts = escapeshellarg($_POST['v_mail_accounts']); + $v_databases = escapeshellarg($_POST['v_databases']); + $v_cron_jobs = escapeshellarg($_POST['v_cron_jobs']); + $v_backups = escapeshellarg($_POST['v_backups']); + $v_disk_quota = escapeshellarg($_POST['v_disk_quota']); + $v_bandwidth = escapeshellarg($_POST['v_bandwidth']); + $v_ns1 = trim($_POST['v_ns1'], '.'); + $v_ns2 = trim($_POST['v_ns2'], '.'); + $v_ns3 = trim($_POST['v_ns3'], '.'); + $v_ns4 = trim($_POST['v_ns4'], '.'); + $v_ns = $v_ns1.",".$v_ns2; + if (!empty($v_ns3)) $v_ns .= ",".$v_ns3; + if (!empty($v_ns4)) $v_ns .= ",".$v_ns4; + $v_ns = escapeshellarg($v_ns); + $v_time = escapeshellarg(date('H:i:s')); + $v_date = escapeshellarg(date('Y-m-d')); + + // Create temprorary directory + exec ('mktemp -d', $output, $return_var); + $tmpdir = $output[0]; + unset($output); + + // Save package file on a fs + $pkg = "WEB_TEMPLATE=".$v_web_template."\n"; + $pkg .= "PROXY_TEMPLATE=".$v_proxy_template."\n"; + $pkg .= "DNS_TEMPLATE=".$v_dns_template."\n"; + $pkg .= "WEB_DOMAINS=".$v_web_domains."\n"; + $pkg .= "WEB_ALIASES=".$v_web_aliases."\n"; + $pkg .= "DNS_DOMAINS=".$v_dns_domains."\n"; + $pkg .= "DNS_RECORDS=".$v_dns_records."\n"; + $pkg .= "MAIL_DOMAINS=".$v_mail_domains."\n"; + $pkg .= "MAIL_ACCOUNTS=".$v_mail_accounts."\n"; + $pkg .= "DATABASES=".$v_databases."\n"; + $pkg .= "CRON_JOBS=".$v_cron_jobs."\n"; + $pkg .= "DISK_QUOTA=".$v_disk_quota."\n"; + $pkg .= "BANDWIDTH=".$v_bandwidth."\n"; + $pkg .= "NS=".$v_ns."\n"; + $pkg .= "SHELL=".$v_shell."\n"; + $pkg .= "BACKUPS=".$v_backups."\n"; + $pkg .= "TIME=".$v_time."\n"; + $pkg .= "DATE=".$v_date."\n"; + $fp = fopen($tmpdir."/".$_POST['v_package'].".pkg", 'w'); + fwrite($fp, $pkg); + fclose($fp); + + // Save changes + exec (VESTA_CMD."v-add-user-package ".$tmpdir." ".$v_package." 'yes'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + + // Remove temporary dir + exec ('rm -rf '.$tmpdir, $output, $return_var); + unset($output); + + // Propogate new package + exec (VESTA_CMD."v-update-user-package ".$v_package." 'json'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + + // Set success message + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('Changes has been saved.'); + } +} + + // Header include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); // Panel top_panel($user,$TAB); -// Are you admin? -if ($_SESSION['user'] == 'admin') { +// Display body +include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_package.html'); - // Check user argument? - if (empty($_GET['package'])) { - header("Location: /list/package/"); - exit; - } - - $v_package = escapeshellarg($_GET['package']); - exec (VESTA_CMD."v-list-user-package ".$v_package." 'json'", $output, $return_var); - check_return_code($return_var,$output); - if (empty($_SESSION['error_msg'])) { - $data = json_decode(implode('', $output), true); - unset($output); - - $v_package = $_GET['package']; - $v_web_template = $data[$v_package]['WEB_TEMPLATE']; - $v_proxy_template = $data[$v_package]['PROXY_TEMPLATE']; - $v_dns_template = $data[$v_package]['DNS_TEMPLATE']; - $v_web_domains = $data[$v_package]['WEB_DOMAINS']; - $v_web_aliases = $data[$v_package]['WEB_ALIASES']; - $v_dns_domains = $data[$v_package]['DNS_DOMAINS']; - $v_dns_records = $data[$v_package]['DNS_RECORDS']; - $v_mail_domains = $data[$v_package]['MAIL_DOMAINS']; - $v_mail_accounts = $data[$v_package]['MAIL_ACCOUNTS']; - $v_databases = $data[$v_package]['DATABASES']; - $v_cron_jobs = $data[$v_package]['CRON_JOBS']; - $v_disk_quota = $data[$v_package]['DISK_QUOTA']; - $v_bandwidth = $data[$v_package]['BANDWIDTH']; - $v_shell = $data[$v_package]['SHELL']; - $v_ns = $data[$v_package]['NS']; - $nameservers = explode(", ", $v_ns); - $v_ns1 = $nameservers[0]; - $v_ns2 = $nameservers[1]; - $v_ns3 = $nameservers[2]; - $v_ns4 = $nameservers[3]; - $v_backups = $data[$v_package]['BACKUPS']; - $v_date = $data[$v_package]['DATE']; - $v_time = $data[$v_package]['TIME']; - $v_status = 'active'; - - - exec (VESTA_CMD."v-list-web-templates json", $output, $return_var); - check_error($return_var); - $web_templates = json_decode(implode('', $output), true); - unset($output); - - exec (VESTA_CMD."v-list-web-templates-proxy json", $output, $return_var); - check_error($return_var); - $proxy_templates = json_decode(implode('', $output), true); - unset($output); - - exec (VESTA_CMD."v-list-dns-templates json", $output, $return_var); - check_error($return_var); - $dns_templates = json_decode(implode('', $output), true); - unset($output); - - exec (VESTA_CMD."v-list-sys-shells json", $output, $return_var); - check_error($return_var); - $shells = json_decode(implode('', $output), true); - unset($output); - - // Action - if (!empty($_POST['save'])) { - // Check input - if (empty($_POST['v_package'])) $errors[] = __('package'); - if (empty($_POST['v_web_template'])) $errors[] = __('web template'); - if (empty($_POST['v_proxy_template'])) $errors[] = __('proxy template'); - if (empty($_POST['v_dns_template'])) $errors[] = __('dns template'); - if (empty($_POST['v_shell'])) $errrors[] = __('shell'); - if (!isset($_POST['v_web_domains'])) $errors[] = __('web domains'); - if (!isset($_POST['v_web_aliases'])) $errors[] = __('web aliases'); - if (!isset($_POST['v_dns_domains'])) $errors[] = __('dns domains'); - if (!isset($_POST['v_dns_records'])) $errors[] = __('dns records'); - if (!isset($_POST['v_mail_domains'])) $errors[] = __('mail domains'); - if (!isset($_POST['v_mail_accounts'])) $errors[] = __('mail accounts'); - if (!isset($_POST['v_databases'])) $errors[] = __('databases'); - if (!isset($_POST['v_cron_jobs'])) $errors[] = __('cron jobs'); - if (!isset($_POST['v_backups'])) $errors[] = __('backups'); - if (!isset($_POST['v_disk_quota'])) $errors[] = __('quota'); - if (!isset($_POST['v_bandwidth'])) $errors[] = __('bandwidth'); - if (empty($_POST['v_ns1'])) $errors[] = __('ns1'); - if (empty($_POST['v_ns2'])) $errors[] = __('ns2'); - - // Protect input - $v_package = escapeshellarg($_POST['v_package']); - $v_web_template = escapeshellarg($_POST['v_web_template']); - $v_proxy_template = escapeshellarg($_POST['v_proxy_template']); - $v_dns_template = escapeshellarg($_POST['v_dns_template']); - $v_shell = escapeshellarg($_POST['v_shell']); - $v_web_domains = escapeshellarg($_POST['v_web_domains']); - $v_web_aliases = escapeshellarg($_POST['v_web_aliases']); - $v_dns_domains = escapeshellarg($_POST['v_dns_domains']); - $v_dns_records = escapeshellarg($_POST['v_dns_records']); - $v_mail_domains = escapeshellarg($_POST['v_mail_domains']); - $v_mail_accounts = escapeshellarg($_POST['v_mail_accounts']); - $v_databases = escapeshellarg($_POST['v_databases']); - $v_cron_jobs = escapeshellarg($_POST['v_cron_jobs']); - $v_backups = escapeshellarg($_POST['v_backups']); - $v_disk_quota = escapeshellarg($_POST['v_disk_quota']); - $v_bandwidth = escapeshellarg($_POST['v_bandwidth']); - $v_ns1 = trim($_POST['v_ns1'], '.'); - $v_ns2 = trim($_POST['v_ns2'], '.'); - $v_ns3 = trim($_POST['v_ns3'], '.'); - $v_ns4 = trim($_POST['v_ns4'], '.'); - $v_ns = $v_ns1.",".$v_ns2; - if (!empty($v_ns3)) $v_ns .= ",".$v_ns3; - if (!empty($v_ns4)) $v_ns .= ",".$v_ns4; - $v_ns = escapeshellarg($v_ns); - $v_time = escapeshellarg(date('H:i:s')); - $v_date = escapeshellarg(date('Y-m-d')); - - // Check for errors - if (!empty($errors[0])) { - foreach ($errors as $i => $error) { - if ( $i == 0 ) { - $error_msg = $error; - } else { - $error_msg = $error_msg.", ".$error; - } - } - $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); - } else { - exec ('mktemp -d', $output, $return_var); - $tmpdir = $output[0]; - unset($output); - - // Create package - $pkg = "WEB_TEMPLATE=".$v_web_template."\n"; - $pkg .= "PROXY_TEMPLATE=".$v_proxy_template."\n"; - $pkg .= "DNS_TEMPLATE=".$v_dns_template."\n"; - $pkg .= "WEB_DOMAINS=".$v_web_domains."\n"; - $pkg .= "WEB_ALIASES=".$v_web_aliases."\n"; - $pkg .= "DNS_DOMAINS=".$v_dns_domains."\n"; - $pkg .= "DNS_RECORDS=".$v_dns_records."\n"; - $pkg .= "MAIL_DOMAINS=".$v_mail_domains."\n"; - $pkg .= "MAIL_ACCOUNTS=".$v_mail_accounts."\n"; - $pkg .= "DATABASES=".$v_databases."\n"; - $pkg .= "CRON_JOBS=".$v_cron_jobs."\n"; - $pkg .= "DISK_QUOTA=".$v_disk_quota."\n"; - $pkg .= "BANDWIDTH=".$v_bandwidth."\n"; - $pkg .= "NS=".$v_ns."\n"; - $pkg .= "SHELL=".$v_shell."\n"; - $pkg .= "BACKUPS=".$v_backups."\n"; - $pkg .= "TIME=".$v_time."\n"; - $pkg .= "DATE=".$v_date."\n"; - - // Write package - $fp = fopen($tmpdir."/".$_POST['v_package'].".pkg", 'w'); - fwrite($fp, $pkg); - fclose($fp); - - // Rewrite package - if (empty($_SESSION['error_msg'])) { - exec (VESTA_CMD."v-add-user-package ".$tmpdir." ".$v_package." 'yes'", $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - - // Remove tmpdir - exec ('rm -rf '.$tmpdir, $output, $return_var); - unset($output); - - // Propogate new package - exec (VESTA_CMD."v-update-user-package ".$v_package." 'json'", $output, $return_var); - check_return_code($return_var,$output); - unset($output); - - if (empty($_SESSION['error_msg'])) { - $_SESSION['ok_msg'] = __('Changes has been saved.'); - } - } - } - } - - include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_package.html'); - unset($_SESSION['error_msg']); - unset($_SESSION['ok_msg']); -} +// Flush session messages +unset($_SESSION['error_msg']); +unset($_SESSION['ok_msg']); // Footer include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); diff --git a/web/edit/user/index.php b/web/edit/user/index.php index bc1aa8889..50f36c3ad 100644 --- a/web/edit/user/index.php +++ b/web/edit/user/index.php @@ -3,118 +3,126 @@ error_reporting(NULL); ob_start(); session_start(); - $TAB = 'USER'; + include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); // Header include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); +// Check user argument +if (empty($_GET['user'])) { + header("Location: /list/user/"); + exit; +} + +// Edit as someone else? +if (($_SESSION['user'] == 'admin') && (!empty($_GET['user']))) { + $user=$_GET['user']; + $v_username=$_GET['user']; +} else { + $user=$_SESSION['user']; + $v_username=$_SESSION['user']; +} + +// List user +exec (VESTA_CMD."v-list-user ".$v_username." json", $output, $return_var); +check_return_code($return_var,$output); +$data = json_decode(implode('', $output), true); +unset($output); + +// Parse user +$v_password = "••••••••"; +$v_email = $data[$v_username]['CONTACT']; +$v_package = $data[$v_username]['PACKAGE']; +$v_language = $data[$v_username]['LANGUAGE']; +$v_fname = $data[$v_username]['FNAME']; +$v_lname = $data[$v_username]['LNAME']; +$v_shell = $data[$v_username]['SHELL']; +$v_ns = $data[$v_username]['NS']; +$nameservers = explode(", ", $v_ns); +$v_ns1 = $nameservers[0]; +$v_ns2 = $nameservers[1]; +$v_ns3 = $nameservers[2]; +$v_ns4 = $nameservers[3]; +$v_suspended = $data[$v_username]['SUSPENDED']; +if ( $v_suspended == 'yes' ) { + $v_status = 'suspended'; +} else { + $v_status = 'active'; +} +$v_time = $data[$v_username]['TIME']; +$v_date = $data[$v_username]['DATE']; + +// List packages +exec (VESTA_CMD."v-list-user-packages json", $output, $return_var); +$packages = json_decode(implode('', $output), true); +unset($output); + +// List lanugages +exec (VESTA_CMD."v-list-sys-languages json", $output, $return_var); +$languages = json_decode(implode('', $output), true); +unset($output); + +// List shells +exec (VESTA_CMD."v-list-sys-shells json", $output, $return_var); +$shells = json_decode(implode('', $output), true); +unset($output); + // Are you admin? -if ($_SESSION['user'] == 'admin') { - // Check user argument? - if (empty($_GET['user'])) { - header("Location: /list/user/"); - exit; - } +// Check POST request +if (!empty($_POST['save'])) { - // Check user - $v_username = escapeshellarg($_GET['user']); - exec (VESTA_CMD."v-list-user ".$v_username." json", $output, $return_var); - check_return_code($return_var,$output); - if (empty($_SESSION['error_msg'])) { - $data = json_decode(implode('', $output), true); - unset($output); - $v_username = $_GET['user']; + // Change password + if (($v_password != $_POST['v_password']) && (empty($_SESSION['error_msg']))) { + $v_password = escapeshellarg($_POST['v_password']); + exec (VESTA_CMD."v-change-user-password ".$v_username." ".$v_password, $output, $return_var); + check_return_code($return_var,$output); $v_password = "••••••••"; - $v_email = $data[$v_username]['CONTACT']; - $v_package = $data[$v_username]['PACKAGE']; - $v_language = $data[$v_username]['LANGUAGE']; - $v_fname = $data[$v_username]['FNAME']; - $v_lname = $data[$v_username]['LNAME']; - $v_shell = $data[$v_username]['SHELL']; - $v_ns = $data[$v_username]['NS']; - $nameservers = explode(", ", $v_ns); - $v_ns1 = $nameservers[0]; - $v_ns2 = $nameservers[1]; - $v_ns3 = $nameservers[2]; - $v_ns4 = $nameservers[3]; - $v_suspended = $data[$v_username]['SUSPENDED']; - if ( $v_suspended == 'yes' ) { - $v_status = 'suspended'; - } else { - $v_status = 'active'; - } - $v_time = $data[$v_username]['TIME']; - $v_date = $data[$v_username]['DATE']; - - exec (VESTA_CMD."v-list-user-packages json", $output, $return_var); - $packages = json_decode(implode('', $output), true); - unset($output); - - exec (VESTA_CMD."v-list-sys-languages json", $output, $return_var); - $languages = json_decode(implode('', $output), true); - unset($output); - - exec (VESTA_CMD."v-list-sys-shells json", $output, $return_var); - $shells = json_decode(implode('', $output), true); unset($output); } - // Action - if (!empty($_POST['save'])) { - $v_username = escapeshellarg($_POST['v_username']); + // Change package (admin only) + if (($v_package != $_POST['v_package']) && ($_SESSION['user'] == 'admin') && (empty($_SESSION['error_msg']))) { + $v_package = escapeshellarg($_POST['v_package']); + exec (VESTA_CMD."v-change-user-package ".$v_username." ".$v_package, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } - // Change password - if (($v_password != $_POST['v_password']) && (empty($_SESSION['error_msg']))) { - $v_password = escapeshellarg($_POST['v_password']); - exec (VESTA_CMD."v-change-user-password ".$v_username." ".$v_password, $output, $return_var); - check_return_code($return_var,$output); - $v_password = "••••••••"; - unset($output); - } + // Change language + if (($v_language != $_POST['v_language']) && (empty($_SESSION['error_msg']))) { + $v_language = escapeshellarg($_POST['v_language']); + exec (VESTA_CMD."v-change-user-language ".$v_username." ".$v_language, $output, $return_var); + check_return_code($return_var,$output); + if (($_GET['user'] == 'admin') && (empty($_SESSION['error_msg']))) $_SESSION['language'] = $_POST['v_language']; + unset($output); + } - // Change package - if (($v_package != $_POST['v_package']) && (empty($_SESSION['error_msg']))) { - $v_package = escapeshellarg($_POST['v_package']); - exec (VESTA_CMD."v-change-user-package ".$v_username." ".$v_package, $output, $return_var); + // Change shell (admin only) + if (($v_shell != $_POST['v_shell']) && ($_SESSION['user'] == 'admin') && (empty($_SESSION['error_msg']))) { + $v_shell = escapeshellarg($_POST['v_shell']); + exec (VESTA_CMD."v-change-user-shell ".$v_username." ".$v_shell, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Change contact email + if (($v_email != $_POST['v_email']) && (empty($_SESSION['error_msg']))) { + if (!filter_var($_POST['v_email'], FILTER_VALIDATE_EMAIL)) { + $_SESSION['error_msg'] = __('Please enter valid email address.'); + } else { + $v_email = escapeshellarg($_POST['v_email']); + exec (VESTA_CMD."v-change-user-contact ".$v_username." ".$v_email, $output, $return_var); check_return_code($return_var,$output); unset($output); } + } - // Change language - if (($v_language != $_POST['v_language']) && (empty($_SESSION['error_msg']))) { - $v_language = escapeshellarg($_POST['v_language']); - exec (VESTA_CMD."v-change-user-language ".$v_username." ".$v_language, $output, $return_var); - check_return_code($return_var,$output); - if (($_GET['user'] == 'admin') && (empty($_SESSION['error_msg']))) $_SESSION['language'] = $_POST['v_language']; - unset($output); - } - - // Change shell - if (($v_shell != $_POST['v_shell']) && (empty($_SESSION['error_msg']))) { - $v_shell = escapeshellarg($_POST['v_shell']); - exec (VESTA_CMD."v-change-user-shell ".$v_username." ".$v_shell, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - - // Change contact email - if (($v_email != $_POST['v_email']) && (empty($_SESSION['error_msg']))) { - // Validate email - if (!filter_var($_POST['v_email'], FILTER_VALIDATE_EMAIL)) { - $_SESSION['error_msg'] = __('Please enter valid email address.'); - } else { - $v_email = escapeshellarg($_POST['v_email']); - exec (VESTA_CMD."v-change-user-contact ".$v_username." ".$v_email, $output, $return_var); - check_return_code($return_var,$output); - } - unset($output); - } - - // Change Name - if (($v_fname != $_POST['v_fname']) || ($v_lname != $_POST['v_lname']) && (empty($_SESSION['error_msg']))) { + // Change full name (admin only) + if (($v_fname != $_POST['v_fname']) || ($v_lname != $_POST['v_lname'])) { + if (($_SESSION['user'] == 'admin') && (empty($_SESSION['error_msg']))) { $v_fname = escapeshellarg($_POST['v_fname']); $v_lname = escapeshellarg($_POST['v_lname']); exec (VESTA_CMD."v-change-user-name ".$v_username." ".$v_fname." ".$v_lname, $output, $return_var); @@ -123,124 +131,41 @@ if ($_SESSION['user'] == 'admin') { $v_fname = $_POST['v_fname']; $v_lname = $_POST['v_lname']; } - - // Change NameServers - if (($v_ns1 != $_POST['v_ns1']) || ($v_ns2 != $_POST['v_ns2']) || ($v_ns3 != $_POST['v_ns3']) || ($v_ns4 != $_POST['v_ns4']) && (empty($_SESSION['error_msg']))) { - $v_ns1 = escapeshellarg($_POST['v_ns1']); - $v_ns2 = escapeshellarg($_POST['v_ns2']); - $v_ns3 = escapeshellarg($_POST['v_ns3']); - $v_ns4 = escapeshellarg($_POST['v_ns4']); - $ns_cmd = VESTA_CMD."v-change-user-ns ".$v_username." ".$v_ns1." ".$v_ns2; - if (!empty($_POST['v_ns3'])) $ns_cmd = $ns_cmd." ".$v_ns3; - if (!empty($_POST['v_ns4'])) $ns_cmd = $ns_cmd." ".$v_ns4; - exec ($ns_cmd, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - - if (empty($_SESSION['error_msg'])) { - $_SESSION['ok_msg'] = __('Changes has been saved.'); - } - } - // Panel - top_panel($user,$TAB); - - include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_user.html'); - unset($_SESSION['error_msg']); - unset($_SESSION['ok_msg']); -} else { - // Check user argument? - if (empty($_GET['user'])) { - header("Location: /list/user/"); - exit; } - // Check user - $v_username = $user; - exec (VESTA_CMD."v-list-user ".$v_username." json", $output, $return_var); - check_return_code($return_var,$output); + // Change NameServers + if (($v_ns1 != $_POST['v_ns1']) || ($v_ns2 != $_POST['v_ns2']) || ($v_ns3 != $_POST['v_ns3']) || ($v_ns4 != $_POST['v_ns4']) && (empty($_SESSION['error_msg']))) { + $v_ns1 = escapeshellarg($_POST['v_ns1']); + $v_ns2 = escapeshellarg($_POST['v_ns2']); + $v_ns3 = escapeshellarg($_POST['v_ns3']); + $v_ns4 = escapeshellarg($_POST['v_ns4']); + $ns_cmd = VESTA_CMD."v-change-user-ns ".$v_username." ".$v_ns1." ".$v_ns2; + if (!empty($_POST['v_ns3'])) $ns_cmd = $ns_cmd." ".$v_ns3; + if (!empty($_POST['v_ns4'])) $ns_cmd = $ns_cmd." ".$v_ns4; + exec ($ns_cmd, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Set success message if (empty($_SESSION['error_msg'])) { - $data = json_decode(implode('', $output), true); - unset($output); - $v_password = "••••••••"; - $v_email = $data[$v_username]['CONTACT']; - $v_fname = $data[$v_username]['FNAME']; - $v_lname = $data[$v_username]['LNAME']; - $v_language = $data[$v_username]['LANGUAGE']; - $v_ns = $data[$v_username]['NS']; - $nameservers = explode(", ", $v_ns); - $v_ns1 = $nameservers[0]; - $v_ns2 = $nameservers[1]; - $v_ns3 = $nameservers[2]; - $v_ns4 = $nameservers[3]; - $v_suspended = $data[$v_username]['SUSPENDED']; - if ( $v_suspended == 'yes' ) { - $v_status = 'suspended'; - } else { - $v_status = 'active'; - } - $v_time = $data[$v_username]['TIME']; - $v_date = $data[$v_username]['DATE']; - - exec (VESTA_CMD."v-list-sys-languages json", $output, $return_var); - $languages = json_decode(implode('', $output), true); - unset($output); - + $_SESSION['ok_msg'] = __('Changes has been saved.'); } - - // Action - if (!empty($_POST['save'])) { - // Change password - if (($v_password != $_POST['v_password']) && (empty($_SESSION['error_msg']))) { - $v_password = escapeshellarg($_POST['v_password']); - exec (VESTA_CMD."v-change-user-password ".$v_username." ".$v_password, $output, $return_var); - check_return_code($return_var,$output); - $v_password = "••••••••"; - unset($output); - } - - // Change language - if (($v_language != $_POST['v_language']) && (empty($_SESSION['error_msg']))) { - $v_language = escapeshellarg($_POST['v_language']); - exec (VESTA_CMD."v-change-user-language ".$v_username." ".$v_language, $output, $return_var); - check_return_code($return_var,$output); - if (empty($_SESSION['error_msg'])) $_SESSION['language'] = $_POST['v_language']; - unset($output); - } - - // Change contact email - if (($v_email != $_POST['v_email']) && (empty($_SESSION['error_msg']))) { - $v_email = escapeshellarg($_POST['v_email']); - exec (VESTA_CMD."v-change-user-contact ".$v_username." ".$v_email, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - - // Change NameServers - if (($v_ns1 != $_POST['v_ns1']) || ($v_ns2 != $_POST['v_ns2']) || ($v_ns3 != $_POST['v_ns3']) || ($v_ns4 != $_POST['v_ns4']) && (empty($_SESSION['error_msg']))) { - $v_ns1 = escapeshellarg($_POST['v_ns1']); - $v_ns2 = escapeshellarg($_POST['v_ns2']); - $v_ns3 = escapeshellarg($_POST['v_ns3']); - $v_ns4 = escapeshellarg($_POST['v_ns4']); - $ns_cmd = VESTA_CMD."v-change-user-ns ".$v_username." ".$v_ns1." ".$v_ns2; - if (!empty($_POST['v_ns3'])) $ns_cmd = $ns_cmd." ".$v_ns3; - if (!empty($_POST['v_ns4'])) $ns_cmd = $ns_cmd." ".$v_ns4; - exec ($ns_cmd, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - } - - if (empty($_SESSION['error_msg'])) { - $_SESSION['ok_msg'] = __('Changes has been saved.'); - } - } - // Panel - top_panel($user,$TAB); - - include($_SERVER['DOCUMENT_ROOT'].'/templates/user/edit_user.html'); - unset($_SESSION['error_msg']); - unset($_SESSION['ok_msg']); } +// Panel +top_panel($user,$TAB); + +// Display body +if ($_SESSION['user'] == 'admin') { + include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_user.html'); +} else { + include($_SERVER['DOCUMENT_ROOT'].'/templates/user/edit_user.html'); +} + +// Flush session messages +unset($_SESSION['error_msg']); +unset($_SESSION['ok_msg']); + // Footer include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); diff --git a/web/edit/web/index.php b/web/edit/web/index.php index a607e5465..fad416202 100644 --- a/web/edit/web/index.php +++ b/web/edit/web/index.php @@ -4,17 +4,11 @@ error_reporting(NULL); ob_start(); session_start(); unset($_SESSION['error_msg']); - $TAB = 'WEB'; + include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); -// Header -include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); - -// Panel -top_panel($user,$TAB); - -// Check user argument? +// Check domain argument if (empty($_GET['domain'])) { header("Location: /list/web/"); exit; @@ -25,73 +19,77 @@ if (($_SESSION['user'] == 'admin') && (!empty($_GET['user']))) { $user=escapeshellarg($_GET['user']); } -// Check domain +// List domain $v_domain = escapeshellarg($_GET['domain']); exec (VESTA_CMD."v-list-web-domain ".$user." ".$v_domain." json", $output, $return_var); -check_return_code($return_var,$output); -if (empty($_SESSION['error_msg'])) { - $data = json_decode(implode('', $output), true); - unset($output); - $v_username = $user; - $v_domain = $_GET['domain']; - $v_ip = $data[$v_domain]['IP']; - $v_template = $data[$v_domain]['TPL']; - $v_aliases = str_replace(',', "\n", $data[$v_domain]['ALIAS']); - $valiases = explode(",", $data[$v_domain]['ALIAS']); - $v_tpl = $data[$v_domain]['IP']; - $v_cgi = $data[$v_domain]['CGI']; - $v_elog = $data[$v_domain]['ELOG']; - $v_ssl = $data[$v_domain]['SSL']; - if ( $v_ssl == 'yes' ) { - exec (VESTA_CMD."v-list-web-domain-ssl ".$user." '".$v_domain."' json", $output, $return_var); - $ssl_str = json_decode(implode('', $output), true); - unset($output); - $v_ssl_crt = $ssl_str[$v_domain]['CRT']; - $v_ssl_key = $ssl_str[$v_domain]['KEY']; - $v_ssl_ca = $ssl_str[$v_domain]['CA']; - } - $v_ssl_home = $data[$v_domain]['SSL_HOME']; - $v_proxy = $data[$v_domain]['PROXY']; - $v_proxy_template = $data[$v_domain]['PROXY']; - $v_proxy_ext = str_replace(',', ', ', $data[$v_domain]['PROXY_EXT']); - $v_stats = $data[$v_domain]['STATS']; - $v_stats_user = $data[$v_domain]['STATS_USER']; - if (!empty($v_stats_user)) $v_stats_password = "••••••••"; - $v_ftp_user = $data[$v_domain]['FTP_USER']; - if (!empty($v_ftp_user)) $v_ftp_password = "••••••••"; - $v_suspended = $data[$v_domain]['SUSPENDED']; - if ( $v_suspended == 'yes' ) { - $v_status = 'suspended'; - } else { - $v_status = 'active'; - } - $v_time = $data[$v_domain]['TIME']; - $v_date = $data[$v_domain]['DATE']; +$data = json_decode(implode('', $output), true); +unset($output); - exec (VESTA_CMD."v-list-user-ips ".$user." json", $output, $return_var); - $ips = json_decode(implode('', $output), true); - unset($output); - - exec (VESTA_CMD."v-list-web-templates json", $output, $return_var); - $templates = json_decode(implode('', $output), true); - unset($output); - - exec (VESTA_CMD."v-list-web-templates-proxy json", $output, $return_var); - $proxy_templates = json_decode(implode('', $output), true); - unset($output); - - exec (VESTA_CMD."v-list-web-stats json", $output, $return_var); - $stats = json_decode(implode('', $output), true); +// Parse domain +$v_username = $user; +$v_domain = $_GET['domain']; +$v_ip = $data[$v_domain]['IP']; +$v_template = $data[$v_domain]['TPL']; +$v_aliases = str_replace(',', "\n", $data[$v_domain]['ALIAS']); +$valiases = explode(",", $data[$v_domain]['ALIAS']); +$v_tpl = $data[$v_domain]['IP']; +$v_cgi = $data[$v_domain]['CGI']; +$v_elog = $data[$v_domain]['ELOG']; +$v_ssl = $data[$v_domain]['SSL']; +if ( $v_ssl == 'yes' ) { + exec (VESTA_CMD."v-list-web-domain-ssl ".$user." '".$v_domain."' json", $output, $return_var); + $ssl_str = json_decode(implode('', $output), true); unset($output); + $v_ssl_crt = $ssl_str[$v_domain]['CRT']; + $v_ssl_key = $ssl_str[$v_domain]['KEY']; + $v_ssl_ca = $ssl_str[$v_domain]['CA']; } - - -// Action +$v_ssl_home = $data[$v_domain]['SSL_HOME']; +$v_proxy = $data[$v_domain]['PROXY']; +$v_proxy_template = $data[$v_domain]['PROXY']; +$v_proxy_ext = str_replace(',', ', ', $data[$v_domain]['PROXY_EXT']); +$v_stats = $data[$v_domain]['STATS']; +$v_stats_user = $data[$v_domain]['STATS_USER']; +if (!empty($v_stats_user)) $v_stats_password = "••••••••"; +$v_ftp_user = $data[$v_domain]['FTP_USER']; +if (!empty($v_ftp_user)) $v_ftp_password = "••••••••"; +$v_ftp_user_prepath = $data[$v_domain]['DOCUMENT_ROOT']; +$v_ftp_user_prepath = str_replace('/public_html', '', $v_ftp_user_prepath, $occurance = 1); $v_ftp_email = $panel[$user]['CONTACT']; +$v_suspended = $data[$v_domain]['SUSPENDED']; +if ( $v_suspended == 'yes' ) { + $v_status = 'suspended'; +} else { + $v_status = 'active'; +} +$v_time = $data[$v_domain]['TIME']; +$v_date = $data[$v_domain]['DATE']; + +// List ip addresses +exec (VESTA_CMD."v-list-user-ips ".$user." json", $output, $return_var); +$ips = json_decode(implode('', $output), true); +unset($output); + +// List web templates +exec (VESTA_CMD."v-list-web-templates json", $output, $return_var); +$templates = json_decode(implode('', $output), true); +unset($output); + +// List proxy templates +exec (VESTA_CMD."v-list-web-templates-proxy json", $output, $return_var); +$proxy_templates = json_decode(implode('', $output), true); +unset($output); + +// List web stat engines +exec (VESTA_CMD."v-list-web-stats json", $output, $return_var); +$stats = json_decode(implode('', $output), true); +unset($output); + +// Check POST request if (!empty($_POST['save'])) { $v_domain = escapeshellarg($_POST['v_domain']); - // IP + // Change web domain IP if (($v_ip != $_POST['v_ip']) && (empty($_SESSION['error_msg']))) { $v_ip = escapeshellarg($_POST['v_ip']); exec (VESTA_CMD."v-change-web-domain-ip ".$v_username." ".$v_domain." ".$v_ip." 'no'", $output, $return_var); @@ -99,27 +97,36 @@ if (!empty($_POST['save'])) { $restart_web = 'yes'; $restart_proxy = 'yes'; unset($output); + } + + // Chane dns domain IP + if (empty($_SESSION['error_msg'])) { exec (VESTA_CMD."v-list-dns-domain ".$v_username." ".$v_domain." json", $output, $return_var); - if ((empty($_SESSION['error_msg'])) && ($return_var == 0 )) { - unset($output); + unset($output); + if ($return_var == 0 ) { exec (VESTA_CMD."v-change-dns-domain-ip ".$v_username." ".$v_domain." ".$v_ip." 'no'", $output, $return_var); check_return_code($return_var,$output); - $restart_dns = 'yes'; - } - unset($output); - foreach($valiases as $v_alias ){ - exec (VESTA_CMD."v-list-dns-domain ".$v_username." '".$v_alias."' json", $output, $return_var); - if ((empty($_SESSION['error_msg'])) && ($return_var == 0 )) { - exec (VESTA_CMD."v-change-dns-domain-ip ".$v_username." '".$v_alias."' ".$v_ip, $output, $return_var); - check_return_code($return_var,$output); - $restart_dns = 'yes'; - } unset($output); + $restart_dns = 'yes'; } } - // Template - if (( $_SESSION['user'] == 'admin') && ($v_template != $_POST['v_template']) && (empty($_SESSION['error_msg']))) { + // Change dns ip for each alias + if (empty($_SESSION['error_msg'])) { + foreach($valiases as $v_alias ){ + exec (VESTA_CMD."v-list-dns-domain ".$v_username." '".$v_alias."' json", $output, $return_var); + unset($output); + if ($return_var == 0 ) { + exec (VESTA_CMD."v-change-dns-domain-ip ".$v_username." '".$v_alias."' ".$v_ip, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + $restart_dns = 'yes'; + } + } + } + + // Change template (admin only) + if (($v_template != $_POST['v_template']) && ( $_SESSION['user'] == 'admin') && (empty($_SESSION['error_msg']))) { $v_template = escapeshellarg($_POST['v_template']); exec (VESTA_CMD."v-change-web-domain-tpl ".$v_username." ".$v_domain." ".$v_template." 'no'", $output, $return_var); check_return_code($return_var,$output); @@ -127,7 +134,7 @@ if (!empty($_POST['save'])) { $restart_web = 'yes'; } - // Aliases + // Change aliases if (empty($_SESSION['error_msg'])) { $waliases = preg_replace("/\n/", " ", $_POST['v_aliases']); $waliases = preg_replace("/,/", " ", $waliases); @@ -151,9 +158,9 @@ if (!empty($_POST['save'])) { if ($return_var == 0) { exec (VESTA_CMD."v-delete-dns-on-web-alias ".$v_username." ".$v_domain." '".$alias."' 'no'", $output, $return_var); check_return_code($return_var,$output); + unset($output); $restart_dns = 'yes'; } - unset($output); } } } @@ -173,15 +180,15 @@ if (!empty($_POST['save'])) { if ($return_var == 0) { exec (VESTA_CMD."v-add-dns-on-web-alias ".$v_username." ".$v_domain." '".$alias."' 'no'", $output, $return_var); check_return_code($return_var,$output); + unset($output); $restart_dns = 'yes'; } } - unset($output); } } } - // Proxy + // Delete proxy support if ((!empty($v_proxy)) && (empty($_POST['v_proxy'])) && (empty($_SESSION['error_msg']))) { exec (VESTA_CMD."v-delete-web-domain-proxy ".$v_username." ".$v_domain." 'no'", $output, $return_var); check_return_code($return_var,$output); @@ -189,6 +196,8 @@ if (!empty($_POST['save'])) { unset($v_proxy); $restart_proxy = 'yes'; } + + // Change proxy template / Update extention list if ((!empty($v_proxy)) && (!empty($_POST['v_proxy'])) && (empty($_SESSION['error_msg']))) { $ext = preg_replace("/\n/", " ", $_POST['v_proxy_ext']); $ext = preg_replace("/,/", " ", $ext); @@ -205,6 +214,8 @@ if (!empty($_POST['save'])) { $restart_proxy = 'yes'; } } + + // Add proxy support if ((empty($v_proxy)) && (!empty($_POST['v_proxy'])) && (empty($_SESSION['error_msg']))) { $v_proxy_template = $_POST['v_proxy_template']; if (!empty($_POST['v_proxy_ext'])) { @@ -221,7 +232,7 @@ if (!empty($_POST['save'])) { $restart_proxy = 'yes'; } - // SSL + // Delete SSL certificate if (( $v_ssl == 'yes' ) && (empty($_POST['v_ssl'])) && (empty($_SESSION['error_msg']))) { exec (VESTA_CMD."v-delete-web-domain-ssl ".$v_username." ".$v_domain." 'no'", $output, $return_var); check_return_code($return_var,$output); @@ -230,6 +241,8 @@ if (!empty($_POST['save'])) { $restart_web = 'yes'; $restart_proxy = 'yes'; } + + // Change SSL certificate if (($v_ssl == 'yes') && (!empty($_POST['v_ssl'])) && (empty($_SESSION['error_msg']))) { if (( $v_ssl_crt != str_replace("\r\n", "\n", $_POST['v_ssl_crt'])) || ( $v_ssl_key != str_replace("\r\n", "\n", $_POST['v_ssl_key'])) || ( $v_ssl_ca != str_replace("\r\n", "\n", $_POST['v_ssl_ca']))) { exec ('mktemp -d', $mktemp_output, $return_var); @@ -269,15 +282,8 @@ if (!empty($_POST['save'])) { $v_ssl_ca = $_POST['v_ssl_ca']; } } - if (( $v_ssl == 'yes') && (!empty($_POST['v_ssl'])) && (empty($_SESSION['error_msg']))) { - if ( $v_ssl_home != $_POST['v_ssl_home'] ) { - $v_ssl_home = escapeshellarg($_POST['v_ssl_home']); - exec (VESTA_CMD."v-change-web-domain-sslhome ".$user." ".$v_domain." ".$v_ssl_home." 'no'", $output, $return_var); - check_return_code($return_var,$output); - $v_ssl_home = $_POST['v_ssl_home']; - unset($output); - } - } + + // Add SSL certificate if (( $v_ssl == 'no') && (!empty($_POST['v_ssl'])) && (empty($_SESSION['error_msg']))) { if ((!empty($_POST['v_ssl'])) && (empty($_POST['v_ssl_crt']))) $errors[] = 'ssl certificate'; if ((!empty($_POST['v_ssl'])) && (empty($_POST['v_ssl_key']))) $errors[] = 'ssl key'; @@ -329,19 +335,34 @@ if (!empty($_POST['save'])) { } } - // Web Stats + // Change document root for ssl domain + if (( $v_ssl == 'yes') && (!empty($_POST['v_ssl'])) && (empty($_SESSION['error_msg']))) { + if ( $v_ssl_home != $_POST['v_ssl_home'] ) { + $v_ssl_home = escapeshellarg($_POST['v_ssl_home']); + exec (VESTA_CMD."v-change-web-domain-sslhome ".$user." ".$v_domain." ".$v_ssl_home." 'no'", $output, $return_var); + check_return_code($return_var,$output); + $v_ssl_home = $_POST['v_ssl_home']; + unset($output); + } + } + + // Delete web stats if ((!empty($v_stats)) && ($_POST['v_stats'] == 'none') && (empty($_SESSION['error_msg']))) { exec (VESTA_CMD."v-delete-web-domain-stats ".$v_username." ".$v_domain, $output, $return_var); check_return_code($return_var,$output); unset($output); $v_stats = ''; } + + // Change web stats engine if ((!empty($v_stats)) && ($_POST['v_stats'] != $v_stats) && (empty($_SESSION['error_msg']))) { $v_stats = escapeshellarg($_POST['v_stats']); exec (VESTA_CMD."v-change-web-domain-stats ".$v_username." ".$v_domain." ".$v_stats, $output, $return_var); check_return_code($return_var,$output); unset($output); } + + // Add web stats if ((empty($v_stats)) && ($_POST['v_stats'] != 'none') && (empty($_SESSION['error_msg']))) { $v_stats = escapeshellarg($_POST['v_stats']); exec (VESTA_CMD."v-add-web-domain-stats ".$v_username." ".$v_domain." ".$v_stats, $output, $return_var); @@ -349,7 +370,7 @@ if (!empty($_POST['save'])) { unset($output); } - // Web Stats Auth + // Delete web stats authorization if ((!empty($v_stats_user)) && (empty($_POST['v_stats_auth'])) && (empty($_SESSION['error_msg']))) { exec (VESTA_CMD."v-delete-web-domain-stats-user ".$v_username." ".$v_domain, $output, $return_var); check_return_code($return_var,$output); @@ -357,6 +378,8 @@ if (!empty($_POST['save'])) { $v_stats_user = ''; $v_stats_password = ''; } + + // Change web stats user or password if ((empty($v_stats_user)) && (!empty($_POST['v_stats_auth'])) && (empty($_SESSION['error_msg']))) { if (empty($_POST['v_stats_user'])) $errors[] = __('stats username'); if (empty($_POST['v_stats_password'])) $errors[] = __('stats password'); @@ -378,6 +401,8 @@ if (!empty($_POST['save'])) { $v_stats_password = "••••••••"; } } + + // Add web stats authorization if ((!empty($v_stats_user)) && (!empty($_POST['v_stats_auth'])) && (empty($_SESSION['error_msg']))) { if (empty($_POST['v_stats_user'])) $errors[] = __('stats user'); if (empty($_POST['v_stats_password'])) $errors[] = __('stats password'); @@ -401,112 +426,203 @@ if (!empty($_POST['save'])) { } } - // Delete FTP Account - if ((!empty($v_ftp_user)) && (empty($_POST['v_ftp'])) && (empty($_SESSION['error_msg']))) { - exec (VESTA_CMD."v-delete-web-domain-ftp ".$v_username." ".$v_domain, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - $v_ftp= ''; - $v_ftp_user = ''; - $v_ftp_password = ''; - } - - // Change FTP Account - if ((!empty($v_ftp_user)) && (!empty($_POST['v_ftp'])) && (empty($_SESSION['error_msg']))) { - if (empty($_POST['v_ftp_user'])) $errors[] = __('ftp user'); - if (empty($_POST['v_ftp_password'])) $errors[] = __('ftp user password'); - if (!empty($errors[0])) { - foreach ($errors as $i => $error) { - if ( $i == 0 ) { - $error_msg = $error; - } else { - $error_msg = $error_msg.", ".$error; + // Change ftp accounts + if (!empty($_POST['v_ftp_user'])) { + $v_ftp_users_updated = array(); + foreach ($_POST['v_ftp_user'] as $i => $v_ftp_user_data) { + $v_ftp_user_data['v_ftp_user'] = preg_replace("/^".$user."_/i", "", $v_ftp_user_data['v_ftp_user']); + if ($v_ftp_user_data['is_new'] == 1) { + if ((!empty($v_ftp_user_data['v_ftp_email'])) && (!filter_var($v_ftp_user_data['v_ftp_email'], FILTER_VALIDATE_EMAIL))) $_SESSION['error_msg'] = __('Please enter valid email address.'); + if (empty($v_ftp_user_data['v_ftp_user'])) $errors[] = 'ftp user'; + if (empty($v_ftp_user_data['v_ftp_password'])) $errors[] = 'ftp user password'; + if (!empty($errors[0])) { + foreach ($errors as $i => $error) { + if ( $i == 0 ) { + $error_msg = $error; + } else { + $error_msg = $error_msg.", ".$error; + } + } + $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); } - } - $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); - } - if (($v_ftp_user != $_POST['v_ftp_user']) || ($_POST['v_ftp_password'] != "••••••••" ) && (empty($_SESSION['error_msg']))) { - $v_ftp_user = preg_replace("/^".$user."_/", "", $_POST['v_ftp_user']); - $v_ftp_user = escapeshellarg($v_ftp_user); - $v_ftp_password = escapeshellarg($_POST['v_ftp_password']); - exec (VESTA_CMD."v-add-web-domain-ftp ".$v_username." ".$v_domain." ".$v_ftp_user." ".$v_ftp_password, $output, $return_var); - check_return_code($return_var,$output); - unset($output); - $v_ftp= ''; - $v_ftp_user = $user."_".preg_replace("/^".$user."_/", "", $_POST['v_ftp_user']); - $v_ftp_password = "••••••••"; - } - } - // Add FTP Account - if ((empty($v_ftp_user)) && (!empty($_POST['v_ftp'])) && (empty($_SESSION['error_msg']))) { - if ((!empty($_POST['v_ftp_email'])) && (!filter_var($_POST['v_ftp_email'], FILTER_VALIDATE_EMAIL))) $_SESSION['error_msg'] = __('Please enter valid email address.'); - if (empty($_POST['v_ftp_user'])) $errors[] = 'ftp user'; - if (empty($_POST['v_ftp_password'])) $errors[] = 'ftp user password'; - if (!empty($errors[0])) { - foreach ($errors as $i => $error) { - if ( $i == 0 ) { - $error_msg = $error; - } else { - $error_msg = $error_msg.", ".$error; + $v_ftp_username = $v_ftp_user_data['v_ftp_user']; + $v_ftp_username_full = $user . '_' . $v_ftp_user_data['v_ftp_user']; + $v_ftp_user = escapeshellarg($v_ftp_username); + $v_ftp_password = escapeshellarg($v_ftp_user_data['v_ftp_password']); + if (empty($_SESSION['error_msg'])) { + exec (VESTA_CMD."v-add-web-domain-ftp ".$v_username." ".$v_domain." ".$v_ftp_username." ".$v_ftp_password . " " . $v_ftp_user_data['v_ftp_path'], $output, $return_var); + check_return_code($return_var,$output); + if ((!empty($v_ftp_user_data['v_ftp_email'])) && (empty($_SESSION['error_msg']))) { + $to = $v_ftp_user_data['v_ftp_email']; + $subject = __("FTP login credentials"); + $hostname = exec('hostname'); + $from = __('MAIL_FROM',$hostname); + $mailtext = __('FTP_ACCOUNT_READY',$_GET['domain'],$user,$v_ftp_username,$v_ftp_user_data['v_ftp_password']); + send_email($to, $subject, $mailtext, $from); + unset($v_ftp_email); + } + unset($output); } + + if ($return_var == 0) { + $v_ftp_password = "••••••••"; + $v_ftp_user_data['is_new'] = 0; + } + else { + $v_ftp_user_data['is_new'] = 1; + } + + $v_ftp_users_updated[] = array( + 'is_new' => empty($_SESSION['error_msg']) ? 0 : 1, + 'v_ftp_user' => $v_ftp_username_full, + 'v_ftp_password' => $v_ftp_password, + 'v_ftp_path' => $v_ftp_user_data['v_ftp_path'], + 'v_ftp_email' => $v_ftp_user_data['v_ftp_email'], + 'v_ftp_pre_path' => $v_ftp_user_prepath + ); + + continue; } - $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); - } - if (empty($_SESSION['error_msg'])) { - $v_ftp_user = escapeshellarg($_POST['v_ftp_user']); - $v_ftp_password = escapeshellarg($_POST['v_ftp_password']); - exec (VESTA_CMD."v-add-web-domain-ftp ".$v_username." ".$v_domain." ".$v_ftp_user." ".$v_ftp_password, $output, $return_var); - check_return_code($return_var,$output); - if ((!empty($_POST['v_ftp_email'])) && (empty($_SESSION['error_msg']))) { - $to = $_POST['v_ftp_email']; - $subject = __("FTP login credentials"); - $hostname = exec('hostname'); - $from = __('MAIL_FROM',$hostname); - $mailtext .= __('FTP_ACCOUNT_READY',$_GET['domain'],$user,$_POST['v_ftp_user'],$_POST['v_ftp_password']); - send_email($to, $subject, $mailtext, $from); - unset($v_ftp_email); + + + if ($v_ftp_user_data['delete'] == 1) { + $v_ftp_username = $user . '_' . $v_ftp_user_data['v_ftp_user']; + exec (VESTA_CMD."v-delete-web-domain-ftp ".$v_username." ".$v_domain." ".$v_ftp_username, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + + continue; } + + // Change FTP Account + if (empty($v_ftp_user_data['v_ftp_user'])) $errors[] = __('ftp user'); + if (empty($v_ftp_user_data['v_ftp_password'])) $errors[] = __('ftp user password'); + if (!empty($errors[0])) { + foreach ($errors as $i => $error) { + if ( $i == 0 ) { + $error_msg = $error; + } else { + $error_msg = $error_msg.", ".$error; + } + } + $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); + } + + $v_ftp_username = $user . '_' . $v_ftp_user_data['v_ftp_user']; //preg_replace("/^".$user."_/", "", $v_ftp_user_data['v_ftp_user']); + $v_ftp_username = escapeshellarg($v_ftp_username); + $v_ftp_user_data['v_ftp_password'] = escapeshellarg(trim($v_ftp_user_data['v_ftp_password'])); + exec (VESTA_CMD."v-change-web-domain-ftp-path ".$v_username." ".$v_domain." ".$v_ftp_username." ".$v_ftp_user_data['v_ftp_path'], $output, $return_var); + if ($v_ftp_user_data['v_ftp_password'] != "••••••••" && !empty($v_ftp_user_data['v_ftp_password'])) { + exec (VESTA_CMD."v-change-web-domain-ftp-password ".$v_username." ".$v_domain." ".$v_ftp_username." ".$v_ftp_user_data['v_ftp_password'], $output, $return_var); + } + check_return_code($return_var, $output); unset($output); - $v_ftp_user = $user."_".$_POST['v_ftp_user']; + $v_ftp_password = "••••••••"; + + $v_ftp_users_updated[] = array( + 'is_new' => 0, + 'v_ftp_user' => $v_ftp_username, + 'v_ftp_password' => $v_ftp_password, + 'v_ftp_path' => $v_ftp_user_data['v_ftp_path'], + 'v_ftp_email' => $v_ftp_user_data['v_ftp_email'], + 'v_ftp_pre_path' => $v_ftp_user_prepath + ); } } - // Restart web + // Restart web server if (!empty($restart_web) && (empty($_SESSION['error_msg']))) { exec (VESTA_CMD."v-restart-web", $output, $return_var); check_return_code($return_var,$output); unset($output); } - // Restart proxy + // Restart proxy server if (!empty($restart_proxy) && (empty($_SESSION['error_msg']))) { exec (VESTA_CMD."v-restart-proxy", $output, $return_var); check_return_code($return_var,$output); unset($output); } - // Restart dns + // Restart dns server if (!empty($restart_dns) && (empty($_SESSION['error_msg']))) { exec (VESTA_CMD."v-restart-dns", $output, $return_var); check_return_code($return_var,$output); unset($output); } + // Set success message if (empty($_SESSION['error_msg'])) { $_SESSION['ok_msg'] = __('Changes has been saved.'); } } + + +$v_ftp_users_raw = explode(':', $v_ftp_user); +$v_ftp_users_paths_raw = explode(':', $data[$v_domain]['FTP_PATH']); +$v_ftp_users = array(); +foreach ($v_ftp_users_raw as $v_ftp_user_index => $v_ftp_user_val) { + if (empty($v_ftp_user_val)) { + continue; + } + $v_ftp_users[] = array( + 'is_new' => 0, + 'v_ftp_user' => $v_ftp_user_val, + 'v_ftp_password' => $v_ftp_password, + 'v_ftp_path' => (isset($v_ftp_users_paths_raw[$v_ftp_user_index]) ? $v_ftp_users_paths_raw[$v_ftp_user_index] : ''), + 'v_ftp_email' => $v_ftp_email, + 'v_ftp_pre_path' => $v_ftp_user_prepath + ); +} + +if (empty($v_ftp_users)) { + $v_ftp_user = null; + $v_ftp_users[] = array( + 'is_new' => 1, + 'v_ftp_user' => '', + 'v_ftp_password' => '', + 'v_ftp_path' => (isset($v_ftp_users_paths_raw[$v_ftp_user_index]) ? $v_ftp_users_paths_raw[$v_ftp_user_index] : ''), + 'v_ftp_email' => '', + 'v_ftp_pre_path' => $v_ftp_user_prepath + ); +} + +// set default pre path for newly created users +$v_ftp_pre_path_new_user = $v_ftp_user_prepath; +if (isset($v_ftp_users_updated)) { + $v_ftp_users = $v_ftp_users_updated; + if (empty($v_ftp_users_updated)) { + $v_ftp_user = null; + $v_ftp_users[] = array( + 'is_new' => 1, + 'v_ftp_user' => '', + 'v_ftp_password' => '', + 'v_ftp_path' => (isset($v_ftp_users_paths_raw[$v_ftp_user_index]) ? $v_ftp_users_paths_raw[$v_ftp_user_index] : ''), + 'v_ftp_email' => '', + 'v_ftp_pre_path' => $v_ftp_user_prepath + ); + } +} + +// Header +include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); + +// Panel +top_panel($user,$TAB); + +// Display body if ($_SESSION['user'] == 'admin') { include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_web.html'); } else { include($_SERVER['DOCUMENT_ROOT'].'/templates/user/edit_web.html'); } + +// Flush session messages unset($_SESSION['error_msg']); unset($_SESSION['ok_msg']); - // Footer include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); diff --git a/web/images/db.png b/web/images/db.png new file mode 100644 index 000000000..7317de69e Binary files /dev/null and b/web/images/db.png differ diff --git a/web/images/disabled_bg.png b/web/images/disabled_bg.png new file mode 100644 index 000000000..2eff4f429 Binary files /dev/null and b/web/images/disabled_bg.png differ diff --git a/web/images/edit.png b/web/images/edit.png index 2ccfad8c9..b30e73c94 100644 Binary files a/web/images/edit.png and b/web/images/edit.png differ diff --git a/web/images/folder.png b/web/images/folder.png new file mode 100644 index 000000000..41dc4e4e2 Binary files /dev/null and b/web/images/folder.png differ diff --git a/web/images/login-as.png b/web/images/login-as.png index 1d7e049c7..06a5b7122 100644 Binary files a/web/images/login-as.png and b/web/images/login-as.png differ diff --git a/web/images/logo.png b/web/images/logo.png index 19acb5a43..9a902492d 100644 Binary files a/web/images/logo.png and b/web/images/logo.png differ diff --git a/web/images/mail.png b/web/images/mail.png new file mode 100644 index 000000000..1281299b9 Binary files /dev/null and b/web/images/mail.png differ diff --git a/web/images/more.png b/web/images/more.png index a2d6aa7c9..ce3092267 100644 Binary files a/web/images/more.png and b/web/images/more.png differ diff --git a/web/images/pause.png b/web/images/pause.png new file mode 100644 index 000000000..4120a61cb Binary files /dev/null and b/web/images/pause.png differ diff --git a/web/images/stats.png b/web/images/stats.png new file mode 100644 index 000000000..c464fe6e4 Binary files /dev/null and b/web/images/stats.png differ diff --git a/web/inc/i18n/ar.php b/web/inc/i18n/ar.php new file mode 100644 index 000000000..58dd12196 --- /dev/null +++ b/web/inc/i18n/ar.php @@ -0,0 +1,443 @@ + 'الحزم', + 'IP' => 'بروتوكول إنترنت', + 'Graphs' => 'رسوم بيانية', + 'Statistics' => 'إحصائيات', + 'Log' => 'سجل', + 'Services' => 'خدمات', + 'Updates' => 'تحديثات', + 'Log in' => 'تسجيل الدخول', + 'Log out' => 'تسجيل الخروج', + + 'USER' => 'المستخدم', + 'WEB' => 'الشبكة', + 'DNS' => 'نظام أسماء النظاقات', + 'MAIL' => 'البريد', + 'DB' => 'قاعدة بيانات', + 'CRON' => 'مجدول الوظائف', + 'BACKUP' => 'النسخ الإحتياطية', + + 'Add User' => 'إضافة مستخدم', + 'Add Domain' => 'إضافة نطاق', + 'Add Web Domain' => 'إضافة نطاق شبكة', + 'Add DNS Domain' => 'تسجيل نطاق في النظام', + 'Add DNS Record' => 'إضافة سجل للنظام', + 'Add Mail Domain' => 'إضافة نطاق بريدي', + 'Add Mail Account' => 'إضافة حساب بريدي', + 'Add Database' => 'إضافة قاعدة بيانات', + 'Add Cron Job' => 'إضافة وظيفة مجدولة', + 'Create Backup' => 'إنشاء نسخة احتياطية', + 'Configure' => 'تهيئة', + 'Restore All' => 'استرجاع الكل', + 'Add Package' => 'إضافة رزمة', + 'Add IP' => 'إضافة بروتوكول إنترنت', + 'Search' => 'بحث', + 'Add one more FTP Account' => 'إضافة المزيد من حساب واحد', + 'Overall Statistics' => 'إحصائيات عامة', + 'Daily' => 'يومي', + 'Weekly' => 'أسبوعي', + 'Monthly' => 'شهري', + 'Yearly' => 'سنوي', + 'Add' => 'إضافة', + 'Back' => 'رجوع', + 'Save' => 'حفظ', + 'Submit' => 'تسليم', + + 'toggle all' => 'تبديل الجميع', + 'apply to selected' => 'تطبيق على ما تم اختياره', + 'rebuild' => 'إعادة إنشاء', + 'rebuild web' => 'إعادة إنشاء الشبكة', + 'rebuild dns' => 'إعادة إنشاء نظام أسماء النطاقات', + 'rebuild mail' => 'إعادة إنشاء البريد', + 'rebuild db' => 'إعادة إنشاء قاعدة البيانات', + 'rebuild cron' => 'إعادة إنشاء مجدول الوظائف', + 'update counters' => 'تحديث العدادات', + 'suspend' => 'تعليق', + 'unsuspend' => 'إلغاء التعليق', + 'delete' => 'حذف', + 'show per user' => 'عرض حسب المستخدم', + 'login as' => 'تسجيل الدخول ك', + 'logout' => 'تسجيل الخروج', + 'edit' => 'تعديل', + 'open webstats' => 'فتح احصائيات الشبكة', + 'view logs' => 'عرض السجلات', + 'list records' => 'عرض السجلات', + 'add record' => 'إضافة سجل', + 'list accounts' => 'عرض الحسابات', + 'add account' => 'إضافة حساب', + 'open webmail' => 'فتح شبكة البريد', + 'open %s' => 'فتح %s', + 'download' => 'تحميل', + 'restore' => 'استرجاع', + 'configure restore settings' => 'تهيئة إعدادات الاسترجاع', + 'stop' => 'إيقاف', + 'start' => 'بدء', + 'restart' => 'إعادة تشغيل', + 'update' => 'تحديث', + 'generate' => 'تكوين', + 'Generate CSR' => 'تكوين طلب توقيع شهادة', + 'reread IP' => 'إعادة قراءة بروتوكول الإنترنت', + 'enable autoupdate' => 'تمكين التحديث التلقائي', + 'disable autoupdate' => 'تعطيل التحديث التلقائي', + + 'Adding User' => 'جاري إضافة مستخدم', + 'Editing User' => 'جاري تعديل المستخدم', + 'Adding Domain' => 'جاري إضافة نطاق', + 'Editing Domain' => 'جاري تعديل النطاق', + 'Adding DNS Domain' => 'جاري إضافة نطاق للنظام', + 'Editing DNS Domain' => 'جاري تعديل النطاق بالنظام', + 'Adding DNS Record' => 'جاري إضافة سجل للنظام', + 'Editing DNS Record' => 'جاري تعديل السحجل بالنظام', + 'Adding Mail Domain' => 'جاري إضافة نطاق بريدي', + 'Editing Mail Domain' => 'جاري تعديل النظاق البريدي', + 'Adding Mail Account' => 'جاري إضافة حساب بريدي', + 'Editing Mail Account' => 'جاري تعديل الحساب البريدي', + 'Adding database' => 'جاري إضافة قاعدة بيانات', + 'Editing Cron Job' => 'جاري تعديل وظيفة مجدولة', + 'Adding Cron Job' => 'جاري إضافة وظيفة مجدولة', + 'Editing Database' => 'جاري تعديل قاعدة البيانات', + 'Adding Package' => 'جاري إضافة رزمة', + 'Editing Package' => 'جاري تعديل الرزمة', + 'Adding IP address' => 'جاري إضافة عنوان بروتوكول إنترنت', + 'Editing IP Address' => 'جاري تعديل عنوان بروتوكول إنترنت', + 'Editing Backup Exclusions' => 'جاري تعديل استثناءات النسخة الاحتياطية', + 'Generating CSR' => 'جاري إنشاء طلب توقيع شهادة', + 'Listing' => 'قائمة', + 'Search Results' => 'نتائج البحث', + + 'active' => 'نشط', + 'spnd' => 'معلق', + 'suspended' => 'معلق', + 'running' => 'يعمل', + 'stopped' => 'متوقف', + 'outdated' => 'نسخة قديمة', + 'updated' => 'محدث', + + 'yes' => 'نعم', + 'no' => 'لا', + 'none' => 'لا شيء', + 'pb' => 'pb', + 'tb' => 'tb', + 'gb' => 'gb', + 'mb' => 'mb', + 'minute' => 'دقيقة', + 'hour' => 'ساعة', + 'day' => 'يوم', + 'days' => 'أيام', + 'hours' => 'ساعات', + 'minutes' => 'دقائق', + 'month' => 'شهر', + 'package' => 'رزمة', + 'Bandwidth' => 'عرض النطاق', + 'Disk' => 'إسطوانة', + 'Web' => 'شبكة', + 'Mail' => 'بريد', + 'Databases' => 'قواعد بيانات', + 'User Directories' => 'مجلدات المستخدم', + 'Template' => 'نموذج', + 'Web Template' => 'أباتشي نموذج', + 'Proxy Template' => 'Nginx نموذج', + 'DNS Template' => 'نظام أسماء النطاقات نموذج', + 'Web Domains' => 'نطاقات الشبكة', + 'SSL Domains' => 'نطاقات آمنة', + 'Web Aliases' => 'اختصارات الشبكة', + 'per domain' => 'لكل نطاق', + 'DNS domains' => 'نطاقات النظام', + 'DNS domains' => 'نطاقات النظام', + 'DNS records' => 'سجلات النظام' , + 'Name Servers' => 'خوادم الأسماء', + 'Mail Domains' => 'نطاقات البريد', + 'Mail Accounts' => 'حسابات البريد', + 'Cron Jobs' => 'الوظائق المجدولة', + 'SSH Access' => 'وصول بعيد آمن', + 'IP Addresses' => 'عنوان بروتوكول انترنت', + 'Backups' => 'نسخ احتياطية', + 'Backup System' => 'نظام النسخ الاحتياطي', + 'backup exclusions' => 'استثناءات النسخ الاحتياطي', + 'template' => 'نموذج', + 'SSL Support' => 'دعم طبقة المقبض الآمن', + 'SSL Home Directory' => 'المجلد الرئيسي لطبقة المقبض الآمن', + 'Proxy Support' => 'Nginx دعم', + 'Proxy Extensions' => 'Nginx إمتدادات', + 'Web Statistics' => 'إحصائيات الشبكة', + 'Additional FTP Account' => 'حساب بروتوكول نقل الملفات إضافي', + 'SOA' => 'هيكلية الخدمات الموجهة', + 'TTL' => 'الوقت المتبقي للخروج', + 'Expire' => 'تنقضي', + 'Records' => 'سجلات', + 'Catchall email' => 'حصل كل البريد', + 'AntiVirus Support' => 'دعم مضاد الفيروسات', + 'AntiSpam Support' => 'دعم مضاد البريد المزعج', + 'DKIM Support' => 'دعم مفاتيح النطاقات', + 'Accounts' => 'حسابات', + 'Quota' => 'حصة', + 'Autoreply' => 'الرد الآلي', + 'Forward to' => 'إعادة توجيه ل', + 'Do not store forwarded mail' => 'لا تحتفظ بنسخة من البريد المعاد توجيهه', + 'database' => 'قاعدة بيانات', + 'User' => 'مستخدم', + 'Host' => 'مضيف', + 'Charset' => 'حزمة نص', + 'Min' => 'دقيقة', + 'Hour' => 'ساعة', + 'Day' => 'يوم', + 'Month' => 'شهر', + 'Day of week' => 'اليوم في الإسبوع', + 'local' => 'محلي', + 'Run Time' => 'وقت التشغيل', + 'Backup Size' => 'حجم النسخة الاحتياطية', + 'SYS' => 'نظام', + 'Domains' => 'نطاقات', + 'Status' => 'حالة', + 'shared' => 'مشارك', + 'dedicated' => 'موجه', + 'Owner' => 'مالك', + 'Users' => 'مستخدمين', + 'Load Average' => 'متوسط التحميل', + 'Memory Usage' => 'استخدام الذاكرة', + 'HTTPD Usage' => 'استخدام نظام بروتوكول نقل النص التشعبي', + 'NGINX Usage' => 'NGINX استخدام', + 'MySQL Usage on localhost' => 'استخدام قاعدة بيانات MySql على المضيف المحلي', + 'PostgreSQL Usage on localhost' => 'PostgreSQL استخدام قاعدة بيانات على المضيف المحلي', + 'Bandwidth Usage eth0' => 'eth0 استخدام سعة النطاق على منفذ', + 'FTP Usage' => 'استخدام بروتوكول نقل الملفات', + 'SSH Usage' => 'استخدام الوصول البعيد الآمن', + 'reverse proxy' => 'الوكيل العكسي', + 'web server' => 'خادم الشبكة', + 'dns server' => 'خادم نظام أسماء النطاقات', + 'mail server' => 'خادم البريد', + 'pop/imap server' => 'pop/imap خادم', + 'email antivirus' => 'مضاد فيروسات البريد', + 'email antispam' => 'مضاد البريد المزعج', + 'database server' => 'خادم قاعدة البيانات', + 'ftp server' => 'خادم بروتوكول نقل الملفات', + 'job scheduler' => 'مجدول الوظائف', + 'CPU' => 'وحدة المعالجة المركزية', + 'Memory' => 'الذاكرة', + 'Uptime' => 'وقت التشغيل', + 'core package' => 'الرزمة الأساسية', + 'php interpreter' => 'php مترجم', + 'internal web server' => 'خادم الشبكة الداخلي', + 'Version' => 'إصدار', + 'Release' => 'نسخة', + 'Architecture' => 'هيكلية', + 'Object' => 'عنصر', + 'Owner' => 'مالك', + 'Username' => 'اسم المستخدم', + 'Password' => 'كلمة المرور', + 'Email' => 'بريد', + 'Package' => 'رزمة', + 'Language' => 'لغة', + 'First Name' => 'الإسم الأول', + 'Last Name' => 'الإسم الأخير', + 'Send login credentials to email address' => 'إرسال معلومات الدخول لعنوان البريد', + 'Default Template' => 'نموذج افتراضي', + 'Default Name Servers' => 'أسماء الخوادم الافتراضية', + 'Domain' => 'نطاق', + 'DNS Support' => 'دعم نظام أسماء النطاقات', + 'Mail Support' => 'دعم البريد', + 'Advanced options' => 'خيارات متقدمة', + 'Aliases' => 'اختصارات', + 'SSL Certificate' => 'شهادة طبقة مقبس آمن', + 'SSL Key' => 'مفتاح طبقة المقبس الآمن', + 'SSL Certificate Authority / Intermediate' => 'سلطة / متوسط شهادة طبقة المقبس الآمن ', + 'SSL CSR' => 'طلب توقيع شهادة باستخدام طبقة المقبس الآمن', + 'optional' => 'اختياري', + 'internal' => 'داخلي', + 'Statistics Authorization' => 'احصائيات الصلاحيات', + 'Statistics Auth' => 'إحصائيات الصلاحيات', + 'Account' => 'حساب', + 'Prefix will be automaticaly added to username' => 'سيضاف بشكل آلي لأسم المستخدم %s اختصار', + 'Send FTP credentials to email' => 'إرسال معلومات الاعتماد لبروتوكول نقل الملفات للبريد', + 'Expiration Date' => 'تاريخ الانتهاء', + 'YYYY-MM-DD' => 'YYYY-MM-DD', + 'Name servers' => 'خوادم الأسماء', + 'Record' => 'سجل', + 'IP or Value' => 'بروتوكول إنترنت أو قيمة', + 'Priority' => 'أولوية', + 'Record Number' => 'عدد السجلات', + 'in megabytes' => 'ب ميجا بابت', + 'Message' => 'رسالة', + 'use local-part' => 'استخدم جزء محلي', + 'one or more email addresses' => 'عنوان بريدي واحد أو أكثر', + 'Prefix will be automaticaly added to database name and database user' => 'الاختصار سيتم إضافته بشكل آلي لإسم قاعدة البيانات واسم المستخدم %s', + 'Database' => 'قاعدة بيانات', + 'Type' => 'نوع', + 'Minute' => 'دقيقة', + 'Command' => 'أمر', + 'Package Name' => 'إسم الرزمة', + 'Netmask' => 'قناع الشبكة', + 'Interface' => 'واجهة', + 'Shared' => 'مشارك', + 'Assigned user' => 'المستخدم المعين', + 'Assigned domain' => 'النطاق المعين', + 'NAT IP association' => 'جمعية ترجمة عناوين بروتوكول الانترنت', + 'shell' => 'منصب', + 'web domains' => 'نطاقات شبكة', + 'web aliases' => 'اسماء الشبكة المستعارة', + 'dns records' => 'سجلات نظام أسماء النطاقات', + 'mail domains' => 'نطاقات البريد', + 'mail accounts' => 'حسابات البريد', + 'accounts' => 'حسابات', + 'databases' => 'قواعد بيانات', + 'cron jobs' => 'وظائف مجدولة', + 'backups' => 'نسخ احتياطية', + 'quota' => 'حصة', + 'day of week' => 'اليوم من الإسبوع', + 'cmd' => 'أمر', + 'users' => 'مستخدمين', + 'domains' => 'نطاقات', + 'aliases' => 'أسماء مستعارة', + 'records' => 'سجلات', + 'jobs' => 'وظائف', + 'username' => 'اسم المستخدم', + 'password' => 'كلمة المرور', + 'type' => 'نوع', + 'charset' => 'حزمة نص', + 'domain' => 'نطاق', + 'ip' => 'بروتوكول إنترنت', + 'ip address' => 'عنوان بروتوكول إنترنت', + 'IP address' => 'عنوان بروتوكول إنترنت', + 'netmask' => 'قناع شبكة', + 'interface' => 'واجهة', + 'assigned user' => 'المستخدم المعين', + 'ns1' => 'مساحة اسم 1', + 'ns2' => 'مساحة اسم 2', + 'user' => 'مستخدم', + 'email' => 'بريد', + 'first name' => 'الإسم الأول', + 'last name' => 'الاسم الأخير', + 'account' => 'حساب', + 'ssl certificate' => 'شهادة طبقة مقبس آمن', + 'ssl key' => 'مفتاح طبقة مقبس آمن', + 'stats user password' => 'كلمة مرور مستخدم الإحصائيات', + 'stats username' => 'مستخدم الإحصائيات', + 'stats password' => 'كلمة مرور الإحصائيات', + 'ftp user password' => 'كلمة مرور مستخدم بروتوكول نقل الملفات', + 'ftp user' => 'مستخدم بروتوكول نقل الملفات', + 'Last 70 lines of %s.%s.log' => 'آخر 70 سطر في %s.%s.log', + 'Download AccessLog' => 'تحميل سجلات الوصول', + 'Download ErrorLog' => 'تحميل سجلات الأخطاء', + 'Country' => 'البلد', + '2 letter code' => 'كود من رسالتين', + 'State / Province' => 'ولاية / مقاطعة', + 'City / Locality' => 'المدينة / المنطقة', + 'Organization' => 'مؤسسة', + + '1 account' => '1 حساب', + '%s accounts' => 'حسابات %s', + '1 domain' => '1 نطاق', + '%s domains' => 'نطاقات %s', + '1 record' => '1 سجل', + '%s records' => 'سجلات %s', + '1 mail account' => '1 حساب بريد', + '%s mail accounts' => 'حسابات بريد %s', + '1 database' => '1 قاعدة بيانات', + '%s databases' => 'قواعد بيانات %s', + '1 cron job' => '1 وظيفة مجدولة', + '%s cron jobs' => 'وظائف مجدولة %s', + '1 archive' => '1 أرشيف', + '%s archives' => 'أرشيف %s', + '1 package' => '1 رزمة', + '%s packages' => 'رزم %s', + '1 IP address' => '1 عنوان بروتوكول إنترنت', + '%s IP addresses' => 'عناوين بروتوكول إنترنت %s', + '1 month' => '1 شهر', + '%s months' => 'أشهر %s', + '1 log record' => '1 سجل', + '%s log records' => 'سجلات %s', + '1 object' => '1 عنصر', + '%s objects' => 'عناصر %s', + 'no exclusions' => 'لا استثناءات', + + 'USER_CREATED_OK' => 'المستخدم %s تم إنشائه بنجاح', + 'WEB_DOMAIN_CREATED_OK' => 'النطاق %sتم إنشائه بنجاح .', + 'DNS_DOMAIN_CREATED_OK' => 'النطاق %s تم إنشائه بنجاح.', + 'DNS_RECORD_CREATED_OK' => 'السجل %s.%s تم إنشائه بنجاح.', + 'MAIL_DOMAIN_CREATED_OK' => 'نطاق البريد %s تم إنشائه بنجاح.', + 'MAIL_ACCOUNT_CREATED_OK' => 'حساب البريد %s@%s تم إنشائه بنجاح', + 'DATABASE_CREATED_OK' => 'قاعدة البيانات %s تم إنشائها بنجاح', + 'CRON_CREATED_OK' => 'الوظيفة المجدولة تم إنشائها بنجاح.', + 'IP_CREATED_OK' => 'عنوان بروتوكول الإنترنت %s تم إنشائه بنجاح.', + 'PACKAGE_CREATED_OK' => 'الرزمة %s تم إنشائها بنجاح.', + 'SSL_GENERATED_OK' => 'تم إنشاء الشهادة بنجاح.', + 'Autoupdate has been successfully enabled' => 'تم تفيعل التحديث التلقائي بنجاح', + 'Autoupdate has been successfully disabled' => 'تم تعطيل التحديث التلقائي بنجاح', + 'Changes has been saved.' => 'تم حفظ التغييرات بنجاح.', + 'Confirmation' => 'Confirmation', + 'DELETE_USER_CONFIRMATION' => 'هل تريد فعلا حذف المستخدم %s?', + 'SUSPEND_USER_CONFIRMATION' => 'هل تريد فعلا تعليق المستخدم %s?', + 'UNSUSPEND_USER_CONFIRMATION' => 'هل تريد فعلا إلغاء تعليق المستخدم %s?', + 'DELETE_DOMAIN_CONFIRMATION' => 'هل تريد فعلا حذف النطاق %s?', + 'SUSPEND_DOMAIN_CONFIRMATION' => 'هل تريد فعلا تعليق النطاق %s?', + 'UNSUSPEND_DOMAIN_CONFIRMATION' => 'هل تريد فعلا إلغاء تعليق النطاق %s?', + 'DELETE_RECORD_CONFIRMATION' => 'هل تريد فعلا حذف السجل %s?', + 'SUSPEND_RECORD_CONFIRMATION' => 'هل تريد فعلا تعليق السجل %s?', + 'UNSUSPEND_RECORD_CONFIRMATION' => 'هل تريد فعلا إلغاء تعليق السجل %s?', + 'DELETE_MAIL_ACCOUNT_CONFIRMATION' => 'هل تريد فعلا حذف %s?', + 'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'هل تريد فعلا تعليق %s?', + 'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'هل تريد فعلا إلغاء تعليق %s?', + 'DELETE_DATABASE_CONFIRMATION' => 'هل تريد فعلا حذف قاعدة البيانات %s?', + 'SUSPEND_DATABASE_CONFIRMATION' => 'هل تريد فعلا تعليق قاعدة البيانات %s?', + 'UNSUSPEND_DATABASE_CONFIRMATION' => 'هل تريد فعلا إلغاء تعليق قاعدة البيانات %s?', + 'DELETE_CRON_CONFIRMATION' => 'هل تريد فعلا حذف الوظيفة المجدولة?', + 'SUSPEND_CRON_CONFIRMATION' => 'هل تريد فعلا تعليق الوظيفة المجدولة?', + 'UNSUSPEND_CRON_CONFIRMATION' => 'هل تريد فعلا إلغاء تعليق الوظيفة المجدولة?', + 'DELETE_BACKUP_CONFIRMATION' => 'هل تريد فعلا حذف التسخة الاحتياطية %s ?', + 'DELETE_EXCLUSION_CONFIRMATION' => 'هل تريد فعلا حذف الاستثناء %s?', + 'DELETE_PACKAGE_CONFIRMATION' => 'هل تريد فعلا حذف الرزمة %s?', + 'DELETE_IP_CONFIRMATION' => 'هل تريد فعلا حذف عنوان بروتوكول الإنترنت %s?', + 'RESTART_CONFIRMATION' => 'هل أنت متأكد من أنك تريد إعادة تشغيل %s?', + 'Welcome' => 'أهلا وسهلا', + 'LOGGED_IN_AS' => 'تم تسجيل الدخول ك %s', + 'Error' => 'خطأ', + 'Invalid username or password' => 'خطأ في اسم المستخدم أو كلمة المرور', + 'Invalid username or code' => 'خطأ في اسم المستخدم أو في الكود', + 'Passwords not match' => 'كلمات المرور غير متطابقة', + 'Please enter valid email address.' => 'برجاء إدخال عنوان بريد إلكتروني صحيح.', + 'Field "%s" can not be blank.' => 'العنصر "%s" لا يمكن أن يبقى فارغا.', + 'Password is too short.' => 'كلمة المرور قصيرة جدا (على الأقل ح حروف)', + 'Error code:' => 'كود الخطأ: %s', + 'SERVICE_ACTION_FAILED' => '"%s" "%s" فشل', + 'IP address is in use' => 'عنوان بروتوكول الإنترنت مستخدم بالفعل', + 'BACKUP_SCHEDULED' =>'تم إضافة الوظيفة لطابور المهام. سيتم إرسال بريد إلكتروني لك عندما تجهز النسخة الاحتياطية للتحميل.', + 'BACKUP_EXISTS' => 'يوجد عملية نسخ احتياطي تعمل حاليا. برجاء الانتظار حتى تنتهي عملية النسخ الاحتياطي.', + 'RESTORE_SCHEDULED' => ' تم إضافة الوظيفة لطابور المهام. سيتم إرسال بريد إلكتروني لك عندما تجهز النسخة الاحتياطية للتحميل.', + 'RESTORE_EXISTS' =>'يوجد عملية استعادة تعمل حاليا. برجاء الانتظار حتى تنتهي عملية الاستعادة قبل البدء بعملية جديدة.', + + 'WEB_EXCLUSIONS' => "اكتب اسم النطاق. واحد في كل سطر. لاستثناء جميع النطاقات استخدم *.. لاستثناء جميع مجالات النطاق استخدم الصيغة التالية: domain.com:public_html/cache:public_html/tmp", + 'DNS_EXCLUSIONS' => "اكتب اسم النطاق, واحد في كل سطر. لاستثناء جميع النطاقات استخدم *", + 'MAIL_EXCLUSIONS' => "اكتب اسم النطاق, واحد في كل سطر. لاستثناء جميع النطاقات استخدم *. لاستثناء حسابات معينة استخدم الصيغة: domain.com:info:support:postmaster", + 'DB_EXCLUSIONS' => "اكتب اسم قاعدة البيانات بالكامل, واحدة في كل سطر. لاستثناء جميع قواعد البيانات استخدم *", + 'CRON_EXCLUSIONS' => "لاستثناء جميع الوظائف المجدولة استخدم *", + 'USER_EXCLUSIONS' => "اكتب اسم المجلد, واحد في كل سطر. لاستثناء جميع المجلدات استخدم *", + + 'Welcome to Vesta Control Panel' => 'Vesta أهلا بكم في لوحة تحكم', + 'MAIL_FROM' => 'Vesta لوحة تحكم ', + 'GREETINGS_GORDON_FREEMAN' => "مرحبا, %s %s,\n", + 'GREETINGS' => "مرحبا,\n", + 'ACCOUNT_READY' => "تم انشاء حسابك بنجاح وهو جاهز للاستخدام.\n\nhttps://%s/login/\nUsername: %s\nPassword: %s\n\n--\nVesta Control Panel\n", + + 'FTP login credentials' => 'معلومات اعتماد الدخول لبروتوكول نقل الملفات', + 'FTP_ACCOUNT_READY' => "تم إنشاء حساب بروتوكول نقل الملفات وهو جاهز للاستخدام.\n\nHostname: %s\nUsername: %s_%s\nPassword: %s\n\n--\nVesta Control Panel\n", + + 'Database Credentials' => 'معلومات اعتماد قاعدة البيانات', + 'DATABASE_READY' => "تم انشاء قاعدة البيانات بنجاح.\n\nDatabase: %s\nUser: %s\nPassword: %s\n%s\n\n--\nVesta Control Panel\n", + + 'forgot password' => 'نسيت كلمة المرور', + 'Confirm' => 'تأكيد', + 'New Password' => 'كلمة مرور جديدة', + 'Confirm Password' => 'تأكيد كلمة المرور', + 'Reset' => 'إعادة تعيين', + 'Reset Code' => 'إعادة تعيين الكود', + 'RESET_NOTICE' => '', + 'RESET_CODE_SENT' => 'لقد تم إرسال كود إعادة تعيين كلمة المرور لعنوان بريدك الإلكتروني
', + 'MAIL_RESET_SUBJECT' => 'تم إعادة تعيين كلمة المرور %s', + 'PASSWORD_RESET_REQUEST' => "لإعادة تعيين كلمة مرور لوحة التحكم , برجاء اتباع الرابط التالي link:\nhttps://%s/reset/?action=confirm&user=%s&code=%s\n\nAlternatively, بامكانك أيضا اتباع الرابط التالي https://%s/reset/?action=code&user=%s وادخال كود إعادة التعيين التالي code:\n%s\n\n إذا لم تطلب إعادة تعيين كلمة المرور, برجاء تجاهل هذه الرسالة وتقبل اعتذارنا.\n\n--\nVesta Control Panel\n", +); diff --git a/web/inc/i18n/bs.php b/web/inc/i18n/bs.php index 98fdb8af6..90c920876 100644 --- a/web/inc/i18n/bs.php +++ b/web/inc/i18n/bs.php @@ -38,6 +38,7 @@ $LANG['bs'] = array( 'Add Package' => 'Dodaj paket', 'Add IP' => 'Dodaj IP', 'Search' => 'Traži', + 'Add one more FTP Account' => 'Dodaj još jednu FTP račun', 'Overall Statistics' => 'Globalna statistika', 'Daily' => 'Dnevno', 'Weekly' => 'Sedmično', @@ -392,6 +393,7 @@ $LANG['bs'] = array( 'DELETE_EXCLUSION_CONFIRMATION' => 'Are you sure to delete %s exclusion?', 'DELETE_PACKAGE_CONFIRMATION' => 'Are you sure to delete package %s?', 'DELETE_IP_CONFIRMATION' => 'Are you sure to delere IP address %s?', + 'RESTART_CONFIRMATION' => 'Are you sure you want to restart %s?', 'Welcome' => 'Dobrodošli', 'LOGGED_IN_AS' => 'Logovani ste kao %s', 'Error' => 'Greška', diff --git a/web/inc/i18n/cn.php b/web/inc/i18n/cn.php index d0de99820..ef0f4fa0d 100644 --- a/web/inc/i18n/cn.php +++ b/web/inc/i18n/cn.php @@ -38,6 +38,7 @@ $LANG['cn'] = array( 'Add Package' => '增加预设方案', 'Add IP' => '增加IP', 'Search' => '搜索', + 'Add one more FTP Account' => '增加一個FTP賬號', 'Overall Statistics' => '总体统计', 'Daily' => '日', 'Weekly' => '周', @@ -392,6 +393,7 @@ $LANG['cn'] = array( 'DELETE_EXCLUSION_CONFIRMATION' => 'Are you sure to delete %s exclusion?', 'DELETE_PACKAGE_CONFIRMATION' => '你确定删除方案 %s?', 'DELETE_IP_CONFIRMATION' => '你确定删除IP地址 %s?', + 'RESTART_CONFIRMATION' => 'Are you sure you want to restart %s?', 'Welcome' => '欢迎光临', 'LOGGED_IN_AS' => '以用户身份 %s 登录', 'Error' => '错误', diff --git a/web/inc/i18n/cz.php b/web/inc/i18n/cz.php index 7f4a95667..bc9249a5e 100644 --- a/web/inc/i18n/cz.php +++ b/web/inc/i18n/cz.php @@ -39,6 +39,7 @@ $LANG['cz'] = array( 'Add Package' => 'Přidat balíček', 'Add IP' => 'Přidat IP', 'Search' => 'Vyhledávání', + 'Add one more FTP Account' => 'Přidat jeden FTP účet', 'Overall Statistics' => 'Celkové statistiky', 'Daily' => 'Denně', 'Weekly' => 'Týdně', @@ -393,6 +394,7 @@ $LANG['cz'] = array( 'DELETE_EXCLUSION_CONFIRMATION' => 'Opravdu chcete odstranit vyloučení %s?', 'DELETE_PACKAGE_CONFIRMATION' => 'Opravdu chcete odstranit package %s?', 'DELETE_IP_CONFIRMATION' => 'Opravdu chcete odstranit IP adresu %s?', + 'RESTART_CONFIRMATION' => 'Opravdu chcete restartovat %s?', 'Welcome' => 'Vítejte!', 'LOGGED_IN_AS' => 'Přihlášen jako uživatel %s', 'Error' => 'Chyba', diff --git a/web/inc/i18n/de.php b/web/inc/i18n/de.php index 9aa9fb291..bcf73c63b 100644 --- a/web/inc/i18n/de.php +++ b/web/inc/i18n/de.php @@ -38,6 +38,7 @@ $LANG['de'] = array( 'Add Package' => 'Paket erstellen', 'Add IP' => 'IP hinzufügen', 'Search' => 'Suche', + 'Add one more FTP Account' => 'Fügen Sie eine weitere FTP-Konto', 'Overall Statistics' => 'Globale Statistik', 'Daily' => 'Täglich', 'Weekly' => 'Wöchentlich', @@ -392,6 +393,7 @@ $LANG['de'] = array( 'DELETE_EXCLUSION_CONFIRMATION' => 'Ausschlüsse %s wirklich löschen?', 'DELETE_PACKAGE_CONFIRMATION' => 'Packet %s? wirklich löschen?', 'DELETE_IP_CONFIRMATION' => '%s wirklich löschen?', + 'RESTART_CONFIRMATION' => '%s wirklich neu starten?', 'Welcome' => 'Willkommen', 'LOGGED_IN_AS' => 'Angemeldet als %s', 'Error' => 'Fehler', diff --git a/web/inc/i18n/en.php b/web/inc/i18n/en.php index f4a8613f2..b44dd555b 100644 --- a/web/inc/i18n/en.php +++ b/web/inc/i18n/en.php @@ -38,6 +38,7 @@ $LANG['en'] = array( 'Add Package' => 'Add Package', 'Add IP' => 'Add IP', 'Search' => 'Search', + 'Add one more FTP Account' => 'Add one more FTP Account', 'Overall Statistics' => 'Overall Statistics', 'Daily' => 'Daily', 'Weekly' => 'Weekly', @@ -265,7 +266,7 @@ $LANG['en'] = array( 'Message' => 'Message', 'use local-part' => 'use local-part', 'one or more email addresses' => 'one or more email addresses', - 'Prefix will be automaticaly added to database name and database user' => 'Prefix %s will be automaticaly added to database name and database user', + 'Prefix will be automaticaly added to database name and database user' => 'Prefix %s will be automaticaly added to database name and database user.', 'Database' => 'Database', 'Type' => 'Type', 'Minute' => 'Minute', @@ -355,50 +356,51 @@ $LANG['en'] = array( '%s objects' => '%s objects', 'no exclusions' => 'no exclusions', - 'USER_CREATED_OK' => 'User %s has been created successfully', + 'USER_CREATED_OK' => 'User %s has been created successfully.', 'WEB_DOMAIN_CREATED_OK' => 'Domain %s has been created successfully.', 'DNS_DOMAIN_CREATED_OK' => 'DNS domain %s has been created successfully.', 'DNS_RECORD_CREATED_OK' => 'Record %s.%s has been created successfully.', 'MAIL_DOMAIN_CREATED_OK' => 'Mail domain %s has been created successfully.', - 'MAIL_ACCOUNT_CREATED_OK' => 'Mail account %s@%s has been created successfully', - 'DATABASE_CREATED_OK' => 'Database %s has been created successfully', + 'MAIL_ACCOUNT_CREATED_OK' => 'Mail account %s@%s has been created successfully.', + 'DATABASE_CREATED_OK' => 'Database %s has been created successfully.', 'CRON_CREATED_OK' => 'Cron job has been created successfully.', 'IP_CREATED_OK' => 'IP address %s has been created successfully.', 'PACKAGE_CREATED_OK' => 'Package %s has been created successfully.', 'SSL_GENERATED_OK' => 'Certificate has been generated successfully.', - 'Autoupdate has been successfully enabled' => 'Autoupdate has been successfully enabled', - 'Autoupdate has been successfully disabled' => 'Autoupdate has been successfully disabled', - 'Changes has been saved.' => 'Changes has been saved.', + 'Autoupdate has been successfully enabled' => 'Autoupdate has been successfully enabled.', + 'Autoupdate has been successfully disabled' => 'Autoupdate has been successfully disabled.', + 'Changes has been saved.' => 'Changes have been saved.', 'Confirmation' => 'Confirmation', - 'DELETE_USER_CONFIRMATION' => 'Are you sure to delete user %s?', - 'SUSPEND_USER_CONFIRMATION' => 'Are you sure to suspend user %s?', - 'UNSUSPEND_USER_CONFIRMATION' => 'Are you sure to unsuspend user %s?', - 'DELETE_DOMAIN_CONFIRMATION' => 'Are you sure to delete domain %s?', - 'SUSPEND_DOMAIN_CONFIRMATION' => 'Are you sure to suspend domain %s?', - 'UNSUSPEND_DOMAIN_CONFIRMATION' => 'Are you sure to unsuspend domain %s?', - 'DELETE_RECORD_CONFIRMATION' => 'Are you sure to delete record %s?', - 'SUSPEND_RECORD_CONFIRMATION' => 'Are you sure to suspend record %s?', - 'UNSUSPEND_RECORD_CONFIRMATION' => 'Are you sure to unsuspend record %s?', - 'DELETE_MAIL_ACCOUNT_CONFIRMATION' => 'Are you sure to delete %s?', - 'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Are you sure to suspend %s?', - 'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Are you sure to unsuspend %s?', - 'DELETE_DATABASE_CONFIRMATION' => 'Are you sure to delete database %s?', - 'SUSPEND_DATABASE_CONFIRMATION' => 'Are you sure to suspend database %s?', - 'UNSUSPEND_DATABASE_CONFIRMATION' => 'Are you sure to unsuspend database %s?', - 'DELETE_CRON_CONFIRMATION' => 'Are you sure to delete cron job?', - 'SUSPEND_CRON_CONFIRMATION' => 'Are you sure to suspend cron job?', - 'UNSUSPEND_CRON_CONFIRMATION' => 'Are you sure to unsuspend cron job?', - 'DELETE_BACKUP_CONFIRMATION' => 'Are you sure to delete %s backup?', - 'DELETE_EXCLUSION_CONFIRMATION' => 'Are you sure to delete %s exclusion?', - 'DELETE_PACKAGE_CONFIRMATION' => 'Are you sure to delete package %s?', - 'DELETE_IP_CONFIRMATION' => 'Are you sure to delere IP address %s?', + 'DELETE_USER_CONFIRMATION' => 'Are you sure you want to delete user %s?', + 'SUSPEND_USER_CONFIRMATION' => 'Are you sure you want to suspend user %s?', + 'UNSUSPEND_USER_CONFIRMATION' => 'Are you sure you want to unsuspend user %s?', + 'DELETE_DOMAIN_CONFIRMATION' => 'Are you sure you want to delete domain %s?', + 'SUSPEND_DOMAIN_CONFIRMATION' => 'Are you sure you want to suspend domain %s?', + 'UNSUSPEND_DOMAIN_CONFIRMATION' => 'Are you sure you want to unsuspend domain %s?', + 'DELETE_RECORD_CONFIRMATION' => 'Are you sure you want to delete record %s?', + 'SUSPEND_RECORD_CONFIRMATION' => 'Are you sure you want to suspend record %s?', + 'UNSUSPEND_RECORD_CONFIRMATION' => 'Are you sure you want to unsuspend record %s?', + 'DELETE_MAIL_ACCOUNT_CONFIRMATION' => 'Are you sure you want to delete %s?', + 'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Are you sure you want to suspend %s?', + 'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Are you sure you want to unsuspend %s?', + 'DELETE_DATABASE_CONFIRMATION' => 'Are you sure you want to delete database %s?', + 'SUSPEND_DATABASE_CONFIRMATION' => 'Are you sure you want to suspend database %s?', + 'UNSUSPEND_DATABASE_CONFIRMATION' => 'Are you sure you want to unsuspend database %s?', + 'DELETE_CRON_CONFIRMATION' => 'Are you sure you want to delete cron job?', + 'SUSPEND_CRON_CONFIRMATION' => 'Are you sure you want to suspend cron job?', + 'UNSUSPEND_CRON_CONFIRMATION' => 'Are you sure you want to unsuspend cron job?', + 'DELETE_BACKUP_CONFIRMATION' => 'Are you sure you want to delete %s backup?', + 'DELETE_EXCLUSION_CONFIRMATION' => 'Are you sure you want to delete %s exclusion?', + 'DELETE_PACKAGE_CONFIRMATION' => 'Are you sure you want to delete package %s?', + 'DELETE_IP_CONFIRMATION' => 'Are you sure you want to delete IP address %s?', + 'RESTART_CONFIRMATION' => 'Are you sure you want to restart %s?', 'Welcome' => 'Welcome', 'LOGGED_IN_AS' => 'Logged in as user %s', 'Error' => 'Error', - 'Invalid username or password' => 'Invalid username or password', - 'Invalid username or code' => 'Invalid username or code', - 'Passwords not match' => 'Passwords not match', - 'Please enter valid email address.' => 'Please enter valid email address.', + 'Invalid username or password' => 'Invalid username or password.', + 'Invalid username or code' => 'Invalid username or code.', + 'Passwords not match' => 'Passwords do not match.', + 'Please enter valid email address.' => 'Please enter a valid email address.', 'Field "%s" can not be blank.' => 'Field "%s" can not be blank.', 'Password is too short.' => 'Password is too short (minimum is 6 characters)', 'Error code:' => 'Error code: %s', @@ -406,7 +408,7 @@ $LANG['en'] = array( 'IP address is in use' => 'IP address is in use', 'BACKUP_SCHEDULED' => 'Task has been added to the queue. You will receive an email notification when your backup is ready for download.', 'BACKUP_EXISTS' => 'An existing backup is already running. Please wait for that backup to finish.', - 'RESTORE_SCHEDULED' => 'Task has been added to the queue. You will receive an email notification when your backup is ready for download.', + 'RESTORE_SCHEDULED' => 'Task has been added to the queue. You will receive an email notification when your restore has been completed.', 'RESTORE_EXISTS' => 'An existing restoration task is already running. Please wait for it to finish before launching it again.', 'WEB_EXCLUSIONS' => "Type domain name, one per line. To exclude all domains use *. To exclude specific dirs use following format: domain.com:public_html/cache:public_html/tmp", @@ -420,10 +422,10 @@ $LANG['en'] = array( 'MAIL_FROM' => 'Vesta Control Panel ', 'GREETINGS_GORDON_FREEMAN' => "Hello, %s %s,\n", 'GREETINGS' => "Hello,\n", - 'ACCOUNT_READY' => "Your account has been created and ready for use.\n\nhttps://%s/login/\nUsername: %s\nPassword: %s\n\n--\nVesta Control Panel\n", + 'ACCOUNT_READY' => "Your account has been created and is ready for use.\n\nhttps://%s/login/\nUsername: %s\nPassword: %s\n\n--\nVesta Control Panel\n", 'FTP login credentials' => 'FTP login credentials', - 'FTP_ACCOUNT_READY' => "FTP account has been created and ready for use.\n\nHostname: %s\nUsername: %s_%s\nPassword: %s\n\n--\nVesta Control Panel\n", + 'FTP_ACCOUNT_READY' => "FTP account has been created and is ready for use.\n\nHostname: %s\nUsername: %s_%s\nPassword: %s\n\n--\nVesta Control Panel\n", 'Database Credentials' => 'Database Credentials', 'DATABASE_READY' => "Database has been created successfully.\n\nDatabase: %s\nUser: %s\nPassword: %s\n%s\n\n--\nVesta Control Panel\n", diff --git a/web/inc/i18n/es.php b/web/inc/i18n/es.php index e160a9ee8..4bad2c8b2 100644 --- a/web/inc/i18n/es.php +++ b/web/inc/i18n/es.php @@ -38,6 +38,7 @@ $LANG['es'] = array( 'Add Package' => 'Añadir Plan', 'Add IP' => 'Añadir IP', 'Search' => 'Buscar', + 'Add one more FTP Account' => 'Añadir una Cuenta FTP adicional', 'Overall Statistics' => 'Estadística General', 'Daily' => 'Diariamente', 'Weekly' => 'Semanalmente', @@ -105,7 +106,7 @@ $LANG['es'] = array( 'Editing Package' => 'Editando Plan', 'Adding IP address' => 'Añadiendo Dirección IP', 'Editing IP Address' => 'Editando Dirección IP', - 'Editing Backup Exclusions' => 'Editando exclusiones de Backup', + 'Editing Backup Exclusions' => 'Editando exclusiones de Respaldo', 'Generating CSR' => 'Generar solicitud de CSR', 'Listing' => 'Listando', 'Search Results' => 'Resultado de Busqueda', @@ -392,6 +393,7 @@ $LANG['es'] = array( 'DELETE_EXCLUSION_CONFIRMATION' => '¿Está seguro que desea eliminar el exclusiones %s ?', 'DELETE_PACKAGE_CONFIRMATION' => '¿Está seguor que desea eliminar el plan %s?', 'DELETE_IP_CONFIRMATION' => '¿Está seguro que desea eliminar la dirección IP %s?', + 'RESTART_CONFIRMATION' => '¿Está seguro que desea reiniciar %s?', 'Welcome' => 'Bienvenido', 'LOGGED_IN_AS' => 'Conectado como el usuario %s', 'Error' => 'Error', diff --git a/web/inc/i18n/fi.php b/web/inc/i18n/fi.php new file mode 100644 index 000000000..ace48fad3 --- /dev/null +++ b/web/inc/i18n/fi.php @@ -0,0 +1,447 @@ + 'Paketit', + 'IP' => 'IP', + 'Graphs' => 'Kuvaajat', + 'Statistics' => 'Tilastot', + 'Log' => 'Loki', + 'Services' => 'Palvelut', + 'Updates' => 'Päivitykset', + 'Log in' => 'Kirjaudu', + 'Log out' => 'Kirjaudu ulos', + + 'USER' => 'TILIT', + 'WEB' => 'WEB', + 'DNS' => 'DNS', + 'MAIL' => 'MAIL', + 'DB' => 'DB', + 'CRON' => 'CRON', + 'BACKUP' => 'BACKUP', + + 'Add User' => 'Lisää käyttäjä', + 'Add Domain' => 'Lisää domaini', + 'Add Web Domain' => 'Lisää Web domain', + 'Add DNS Domain' => 'Lisää DNS domain', + 'Add DNS Record' => 'Lisää DNS asetus', + 'Add Mail Domain' => 'Lisää email domain', + 'Add Mail Account' => 'Lisää email käyttäjä', + 'Add Database' => 'Lisää tietokanta', + 'Add Cron Job' => 'Lisää Cron-tehtävä', + 'Create Backup' => 'Luo varmuuskopio', + 'Configure' => 'Määritä', + 'Restore All' => 'Palauta kaikki', + 'Add Package' => 'Lisää paketti', + 'Add IP' => 'Lisää IP', + 'Add one more FTP Account' => 'Lisää vielä yhden FTP käyttäjä', + 'Search' => 'Haku', + 'Overall Statistics' => 'Kokonaistilastot', + 'Daily' => 'Päivä', + 'Weekly' => 'Viikko', + 'Monthly' => 'Kuukausi', + 'Yearly' => 'Vuosi', + 'Add' => 'Lisää', + 'Back' => 'Takaisin', + 'Save' => 'Tallenna', + 'Submit' => 'Lähetä', + + 'toggle all' => 'vaihda kaikki', + 'apply to selected' => 'toteuta valituissa', + 'rebuild' => 'palauta', + 'rebuild web' => 'palauta web', + 'rebuild dns' => 'palauta dns', + 'rebuild mail' => 'palauta sähköposti', + 'rebuild db' => 'palauta tietokanta', + 'rebuild cron' => 'palauta cron', + 'update counters' => 'päivitä laskurit', + 'suspend' => 'keskeytä', + 'unsuspend' => 'palauta', + 'delete' => 'poista', + 'show per user' => 'näytä per käyttäjä', + 'login as' => 'kirjaudu sisään käyttäjänä', + 'logout' => 'kirjaudu ulos', + 'edit' => 'muokkaa', + 'open webstats' => 'avaa webtilastot', + 'view logs' => 'näytä lokit', + 'list records' => 'listaa %s tietuetta', + 'add record' => 'lisää tietue', + 'list accounts' => 'listaa %s käyttäjää', + 'add account' => 'lisää käyttäjä', + 'open webmail' => 'avaa webmail', + 'open %s' => 'avaa %s', + 'download' => 'lataa', + 'restore' => 'palauta', + 'configure restore settings' => 'määritä palautusasetukset', + 'stop' => 'pysäytä', + 'start' => 'käynnistä', + 'restart' => 'käynnistä uudelleen', + 'update' => 'päivitä', + 'generate' => 'generoi', + 'Generate CSR' => 'generoi CSR', + 'reread IP' => 'lue IP uudelleen', + 'enable autoupdate' => 'päivitä automaattisesti', + 'disable autoupdate' => 'älä päivitä automaattisesti', + + 'Adding User' => 'Lisätään käyttäjää', + 'Editing User' => 'Muokataan käyttäjää', + 'Adding Domain' => 'Lisätään domainia', + 'Editing Domain' => 'Muokataan domainia', + 'Adding DNS Domain' => 'Lisätään DNS-domainia', + 'Editing DNS Domain' => 'Muokataan DNS-domainia', + 'Adding DNS Record' => 'Lisätään DNS-tietuetta', + 'Editing DNS Record' => 'Muokataan DNS-tietuetta', + 'Adding Mail Domain' => 'Lisätään sähköpostidomainia', + 'Editing Mail Domain' => 'Muokataan sähköpostidomainia', + 'Adding Mail Account' => 'Lisätään sähköpostitiliä', + 'Editing Mail Account' => 'Muokataan sähköpostitiliä', + 'Adding database' => 'Lisätään tietokantaa', + 'Editing Cron Job' => 'Muokataan Cron-tehtävää', + 'Adding Cron Job' => 'Lisätään Cron-tehtävää', + 'Editing Database' => 'Muokataan tietokantaa', + 'Adding Package' => 'Lisätään pakettia', + 'Editing Package' => 'Muokataan pakettia', + 'Adding IP address' => 'Lisätään IP-osoitetta', + 'Editing IP Address' => 'Muokataan IP-osoitetta', + 'Editing Backup Exclusions' => 'Muokataan Varmuuskopioiden poikkeuksia', + 'Generating CSR' => 'Generoidaan CSR', + 'Listing' => 'Listataan', + 'Search Results' => 'Hakutulokset', + + 'active' => 'aktiivinen', + 'spnd' => 'keskeytetty', + 'suspended' => 'keskeytetty', + 'running' => 'käynnissä', + 'stopped' => 'pysäytetty', + 'outdated' => 'vanhentunut', + 'updated' => 'päivitetty', + + 'yes' => 'kyllä', + 'no' => 'ei', + 'none' => 'ei mitään', + 'pb' => 'pb', //petatavu + 'tb' => 'tb', //teratavu + 'gb' => 'gb', //gigatavu + 'mb' => 'mb', //megatavu + 'minute' => 'minuutti', + 'hour' => 'tunti', + 'day' => 'päivä', + 'days' => 'päivää', + 'hours' => 'tuntia', + 'minutes' => 'minuuttia', + 'month' => 'kuukautta', + 'package' => 'paketti', + 'traffic' => 'tiedonsiirto', + 'disk' => 'levytila', + 'Bandwidth' => 'Kaistanleveys', + 'Disk' => 'Levy', + 'Web' => 'Web', + 'Mail' => 'Sähköposti', + 'Databases' => 'Tietokannat', + 'User Directories' => 'Käyttäjähakemistot', + 'Template' => 'Pohja', + 'Web Template' => 'Apache-pohja', + 'Proxy Template' => 'Nginx-pohja', + 'DNS Template' => 'DNS-pohja', + 'Web Domains' => 'Web-domainit', + 'SSL Domains' => 'SSL-domainit', + 'Web Aliases' => 'Web-aliakset', + 'per domain' => 'per domaini', + 'DNS domains' => 'DNS-domainit', + 'DNS records' => 'DNS-tietueet', + 'Name Servers' => 'Nimipalvelimet', + 'Mail Domains' => 'Sähköpostidomainit', + 'Mail Accounts' => 'Sähköpostikäyttäjät', + 'Cron Jobs' => 'Cron-tehtävät', + 'SSH Access' => 'SSH-oikeudet', + 'IP Addresses' => 'IP-osoitteet', + 'Backups' => 'Varmuuskopiot', + 'Backup System' => 'Varmuuskopioi järjestelmä', + 'backup exclusions' => 'varmuuskopioinnin poikkeukset', + 'template' => 'pohjat', + 'SSL Support' => 'SSL-tuki', + 'SSL Home Directory' => 'SSL-kotihakemisto', + 'Proxy Support' => 'Nginx tuki', + 'Proxy Extensions' => 'Nginx laajennukset', + 'Web Statistics' => 'Webtilastot', + 'Additional FTP Account' => 'Ylimääräinen FTP-tili', + 'SOA' => 'SOA', + 'TTL' => 'TTL', + 'Expire' => 'Päättyy', + 'Records' => 'Tietueet', + 'Catchall email' => 'Catchall-sähköposti', + 'AntiVirus Support' => 'AntiVirus-tuki', + 'AntiSpam Support' => 'AntiSpam-tuki', + 'DKIM Support' => 'DKIM-tuki', + 'Accounts' => 'Tilit', + 'Quota' => 'Kiintiö', + 'Autoreply' => 'Automaattinen vastaus', + 'Forward to' => 'Uudelleenohjaa', + 'Do not store forwarded mail' => 'Älä säilytä uudelleenohjattuja viestejä', + 'database' => 'tietokanta', + 'User' => 'Käyttäjä', + 'Host' => 'Host', + 'Charset' => 'Merkistö', + 'Min' => 'Min', + 'Hour' => 'Tunti', + 'Day' => 'Päivä', + 'Month' => 'Kuukausi', + 'Day of week' => 'Viikonpäivä', + 'local' => 'paikallinen', + 'Run Time' => 'Run Time', + 'Backup Size' => 'Varmuuskopion koko', + 'SYS' => 'SYS', + 'Domains' => 'Domainit', + 'Status' => 'Tila', + 'shared' => 'jaetut', + 'dedicated' => 'dedicated', + 'Owner' => 'Omistaja', + 'Users' => 'Käyttäjät', + 'Load Average' => 'Keskimääräinen Käyttöaste', + 'Memory Usage' => 'Muistinkäyttö', + 'HTTPD Usage' => 'HTTPD-käyttö', + 'NGINX Usage' => 'NGINX-käyttö', + 'APACHE2 Usage' => 'APACHE2-käyttö', + 'MySQL Usage on localhost' => 'MySQL-käyttö @ localhost', + 'PostgreSQL Usage on localhost' => 'PostgreSQL-käyttö @ localhost', + 'Bandwidth Usage eth0' => 'Kaistankäyttö eth0', + 'Bandwidth Usage eth1' => 'Kaistankäyttö eth1', + 'FTP Usage' => 'FTP-käyttö', + 'SSH Usage' => 'SSH-käyttö', + 'reverse proxy' => 'reverse proxy', + 'web server' => 'web-palvelin', + 'dns server' => 'dns-palvelin', + 'mail server' => 'sähköpostipalvelin', + 'pop/imap server' => 'pop/imap-palvelin', + 'email antivirus' => 'sähköpostin antivirus', + 'email antispam' => 'sähköpostin antispam', + 'database server' => 'tietokantapalvelin', + 'ftp server' => 'ftp-palvelin', + 'job scheduler' => 'job scheduler', //no-idea + 'CPU' => 'Prosessori', + 'Memory' => 'Muisti', + 'Uptime' => 'Käyttöaika', + 'core package' => 'core-paketti', + 'php interpreter' => 'php-tulkki', + 'internal web server' => 'sisäinen web-palvelin', + 'Version' => 'Versio', + 'Release' => 'Julkaisu', + 'Architecture' => 'Arkkitehtuuri', + 'Object' => 'Objekti', + 'Owner' => 'Omistaja', + 'Username' => 'Käyttäjä', + 'Password' => 'Salasana', + 'Email' => 'Sähköposti', + 'Package' => 'Paketti', + 'Language' => 'Kieli', + 'First Name' => 'Etunimi', + 'Last Name' => 'Sukunimi', + 'Send login credentials to email address' => 'Lähetä kirjautumistiedot sähköpostilla.', + 'Default Template' => 'Oletuspohja', + 'Default Name Servers' => 'Oletusnimipalvelimet', + 'Domain' => 'Domain', + 'DNS Support' => 'Tarvitsee DNS:n', + 'Mail Support' => 'Tarvitsee Sähköpostin', + 'Advanced options' => 'Lisäasetukset', + 'Aliases' => 'Aliakset', + 'SSL Certificate' => 'SSL-sertifikaatti', + 'SSL Key' => 'SSL-avain', + 'SSL Certificate Authority / Intermediate' => 'SSL Certificate Authority / Intermediate', //no-idea + 'SSL CSR' => 'SSL CSR', + 'optional' => 'valinnainen', + 'internal' => 'sisäinen', + 'Statistics Authorization' => 'Tilastoinnin valtuutus', + 'Statistics Auth' => 'Tilastoinnin Auth', + 'Account' => 'Tili', + 'Prefix will be automaticaly added to username' => 'Etuliite %s lisätään automaattisesti käyttäjänimeen.', + 'Send FTP credentials to email' => 'Lähetä FTP-kirjautumistiedot sähköpostilla', + 'Expiration Date' => 'Viimeinen käyttöpäivä', + 'YYYY-MM-DD' => 'YYYY-MM-DD', + 'Name servers' => 'Nimipalvelimet', + 'Record' => 'Tietue', + 'IP or Value' => 'IP or Value', //no-idea + 'Priority' => 'Prioriteetti', + 'Record Number' => 'Tietueen numero', + 'in megabytes' => 'megatavuissa', + 'Message' => 'Viesti', + 'use local-part' => 'use local-part', //no-idea + 'one or more email addresses' => 'yksi tai useampia sähköposteja', + 'Prefix will be automaticaly added to database name and database user' => 'Etuliite %s lisätään automaattisesti tietokannan nimeen ja käyttäjään', + 'Database' => 'Tietokanta', + 'Type' => 'Tyyppi', + 'Minute' => 'Minuutti', + 'Command' => 'Käsky', + 'Package Name' => 'Paketin nimi', + 'Netmask' => 'Netmask', //no-idea + 'Interface' => 'Interface', //no-idea + 'Shared' => 'Jaettu', + 'Assigned user' => 'Assigned user', + 'Assigned domain' => 'Assigned domain', + 'NAT IP association' => 'NAT IP association', //no-idea + 'shell' => 'shell', + 'web domains' => 'web-domainit', + 'web aliases' => 'web-aliakset', + 'dns records' => 'dns-tietueet', + 'mail domains' => 'sähköpostidomainit', + 'mail accounts' => 'sähköpostitilit', + 'accounts' => 'tilit', + 'databases' => 'tietokannat', + 'cron jobs' => 'cron-tehtävät', + 'backups' => 'varmuuskopiot', + 'quota' => 'kiintiö', + 'day of week' => 'viikonpäivä', + 'cmd' => 'cmd', + 'users' => 'käyttäjät', + 'domains' => 'domainit', + 'aliases' => 'aliakset', + 'records' => 'tietueet', + 'jobs' => 'tehtävät', + 'username' => 'käyttäjänimi', + 'password' => 'salasana', + 'type' => 'tyyppi', + 'charset' => 'charset', + 'domain' => 'domain', + 'ip' => 'ip', + 'ip address' => 'ip-osoite', + 'IP address' => 'IP-osoite', + 'netmask' => 'netmask', + 'interface' => 'interface', + 'assigned user' => 'omistaja', + 'ns1' => 'ns1', + 'ns2' => 'ns2', + 'user' => 'käyttäjä', + 'email' => 'sähköposti', + 'first name' => 'etunimi', + 'last name' => 'sukunimi', + 'account' => 'tili', + 'ssl certificate' => 'ssl-sertifikaatti', + 'ssl key' => 'ssl-avain', + 'stats user password' => 'tilastoinnin käyttäjän salasana', + 'stats username' => 'tilastoinnin käyttäjä', + 'stats password' => 'tilastoinnin salasana', + 'ftp user password' => 'ftp-käyttäjän salasana', + 'ftp user' => 'ftp-käyttäjä', + 'Last 70 lines of %s.%s.log' => '%s 70 viimeistä lokimerkintää.%s.log', + 'Download AccessLog' => 'Lataa AccessLog', + 'Download ErrorLog' => 'Lataa Virheloki', + 'Country' => 'Maa', + '2 letter code' => '2 kirjaimen lyhenne', + 'State / Province' => 'Osavaltio / Maakunta', + 'City / Locality' => 'Kaupunki / Paikkakunta', + 'Organization' => 'Organisaatio', + + '1 account' => '1 tili', + '%s accounts' => '%s tiliä', + '1 domain' => '1 domain', + '%s domains' => '%s domainia', + '1 record' => '1 tietue', + '%s records' => '%s tietuetta', + '1 mail account' => '1 sähköpostitili', + '%s mail accounts' => '%s sähköpostitiliä', + '1 database' => '1 tietokanta', + '%s databases' => '%s tietokantaa', + '1 cron job' => '1 cron-tehtävä', + '%s cron jobs' => '%s cron-tehtävää', + '1 archive' => '1 archive', + '%s archives' => '%s archives', + '1 package' => '1 paketti', + '%s packages' => '%s pakettia', + '1 IP address' => '1 IP-osoite', + '%s IP addresses' => '%s IP-osoitetta', + '1 month' => '1 kuukausi', + '%s months' => '%s kuukautta', + '1 log record' => '1 lokimerkintä', + '%s log records' => '%s lokimerkintää', + '1 object' => '1 objekti', + '%s objects' => '%s objektia', + 'no exclusions' => 'ei poikkeuksia', + + 'USER_CREATED_OK' => 'Käyttäjä %s lisättiin onnistuneesti', + 'WEB_DOMAIN_CREATED_OK' => 'Domain %s lisättiin onnistuneesti.', + 'DNS_DOMAIN_CREATED_OK' => 'DNS-domain %s lisättiin onnistuneesti.', + 'DNS_RECORD_CREATED_OK' => 'Tietue %s.%s lisättiin onnistuneesti.', + 'MAIL_DOMAIN_CREATED_OK' => 'Sähköpostidomain %s lisättiin onnistuneesti.', + 'MAIL_ACCOUNT_CREATED_OK' => 'Sähköpostitili %s@%s lisättiin onnistuneesti.', + 'DATABASE_CREATED_OK' => 'Tietokanta %s lisättiin onnistuneesti.', + 'CRON_CREATED_OK' => 'Cron-tehtävä lisättiin onnistuneesti.', + 'IP_CREATED_OK' => 'IP-osoite %s lisättiin onnistuneesti.', + 'PACKAGE_CREATED_OK' => 'Paketti %s lisättiin onnistuneesti.', + 'SSL_GENERATED_OK' => 'Sertifikaatti lisättiin onnistuneesti.', + 'Autoupdate has been successfully enabled' => 'Automaattinen päivitys otettu käyttöön', + 'Autoupdate has been successfully disabled' => 'Automaattinen päivitys poistettu käytöstä', + 'Changes has been saved.' => 'Muutokset tallennettu.', + 'Confirmation' => 'Hyväksyntä', + 'DELETE_USER_CONFIRMATION' => 'Haluatko varmasti poistaa käyttäjän %s?', + 'SUSPEND_USER_CONFIRMATION' => 'Haluatko varmasti keskeyttää käyttäjän %s?', + 'UNSUSPEND_USER_CONFIRMATION' => 'Haluatko varmasti ottaa käyttöön käyttäjän %s?', + 'DELETE_DOMAIN_CONFIRMATION' => 'Haluatko varmasti poistaa domainin %s?', + 'SUSPEND_DOMAIN_CONFIRMATION' => 'Haluatko varmasti keskeyttää domainin %s?', + 'UNSUSPEND_DOMAIN_CONFIRMATION' => 'Haluatko varmasti ottaa käyttöön domainin %s?', + 'DELETE_RECORD_CONFIRMATION' => 'Haluatko varmasti poistaa tietueen %s?', + 'SUSPEND_RECORD_CONFIRMATION' => 'Haluatko varmasti keskeyttää tietueen %s?', + 'UNSUSPEND_RECORD_CONFIRMATION' => 'Haluatko varmasti ottaa käyttöön tietueen %s?', + 'DELETE_MAIL_ACCOUNT_CONFIRMATION' => 'Haluatko varmasti poistaa %s?', + 'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Haluatko varmasti keskeyttää %s?', + 'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Haluatko varmasti ottaa käyttöön %s?', + 'DELETE_DATABASE_CONFIRMATION' => 'Haluatko varmasti poistaa tietokannan %s?', + 'SUSPEND_DATABASE_CONFIRMATION' => 'Haluatko varmasti keskeyttää tietokannan %s?', + 'UNSUSPEND_DATABASE_CONFIRMATION' => 'Haluatko varmasti ottaa käyttöön tietokannan %s?', + 'DELETE_CRON_CONFIRMATION' => 'Haluatko varmasti poistaa cron-tehtävän?', + 'SUSPEND_CRON_CONFIRMATION' => 'Haluatko varmasti keskeyttää cron-tehtävän?', + 'UNSUSPEND_CRON_CONFIRMATION' => 'Haluatko varmasti ottaa käyttöön cron-tehtävän?', + 'DELETE_BACKUP_CONFIRMATION' => 'Haluatko varmasti poistaa %s varmuuskopion?', + 'DELETE_EXCLUSION_CONFIRMATION' => 'Haluatko varmasti poistaa %s poikkeuksen?', + 'DELETE_PACKAGE_CONFIRMATION' => 'Haluatko varmasti poistaa paketin %s?', + 'DELETE_IP_CONFIRMATION' => 'Haluatko varmasti poistaa IP-osoitteen %s?', + 'RESTART_CONFIRMATION' => 'Haluatko varmasti käynnistää uudelleen %s?', + 'Welcome' => 'Tervetuloa', + 'LOGGED_IN_AS' => 'Kirjautunut käyttäjänä %s', + 'Error' => 'Virhe', + 'Invalid username or password' => 'Väärä käyttäjänimi tai salasana', + 'Invalid username or code' => 'Väärä käyttäjänimi tai koodi', + 'Passwords not match' => 'Salasanat eivät täsmää', + 'Please enter valid email address.' => 'Syötä toimiva sähköpostiosoite.', + 'Field "%s" can not be blank.' => 'Kenttä "%s" ei voi olla tyhjä.', + 'Password is too short.' => 'Salasana on liian lyhyt (min. 6 merkkiä)', + 'Error code:' => 'Virhekoodi: %s', + 'SERVICE_ACTION_FAILED' => '"%s" "%s" epäonnistui', + 'IP address is in use' => 'IP-osoite on käytössä', + 'BACKUP_SCHEDULED' => 'Tehtävä on lisätty jonoon. Saat sähköpostin kun varmuuskopiosi on valmis ladattavaksi.', + 'BACKUP_EXISTS' => 'Aikaisempi varmuuskopiointi on vielä käynnissä, odota kunnes se päättyy.', + 'RESTORE_SCHEDULED' => 'Tehtävä on lisätty jonoon. Saat sähköpostin kun varmuuskopiosi on valmis ladattavaksi.', + 'RESTORE_EXISTS' => 'Aikaisempi palautus on vielä käynnissä, odota kunnes se päättyy.', + + 'WEB_EXCLUSIONS' => "Syötä domainin nimi, yksi per rivi. Syötä '*', jos haluat ohittaa kaikki domainit. Ohittaksesi pois tiettyjä hakemistoja käytä seuraavaa rakennetta: domain.com:public_html/cache:public_html/tmp", + 'DNS_EXCLUSIONS' => "Syötä domainin nimi, yksi per rivi. Syötä '*', jos haluat ohittaa kaikki domainit.", + 'MAIL_EXCLUSIONS' => "Syötä domainin nimi, yksi per rivi. Syötä '*', jos haluat ohittaa kaikki domainit. Ohittaksesi pois tiettyjä hakemistoja käytä seuraavaa rakennetta: domain.com:info:support:postmaster", + 'DB_EXCLUSIONS' => "Syötä koko tietokannan nimi, yksi per rivi. Syötä '*', jos haluat ohittaa kaikki tietokannat.", + 'CRON_EXCLUSIONS' => "Ohittaaksesi kaikki tehtävät käytä '*'", + 'USER_EXCLUSIONS' => "Syötä kansion nimi, yksi per rivi. Ohittaaksesi kaikki tietokannat syötä '*'", + + 'Welcome to Vesta Control Panel' => 'Tervetuloa Vesta Hallintapaneeliin', + 'MAIL_FROM' => 'Vesta Hallintapaneeli ', + 'GREETINGS_GORDON_FREEMAN' => "Morjens, %s %s,\n", + 'GREETINGS' => "Morjens,\n", + 'ACCOUNT_READY' => "Käyttätilisi on luotu ja odottaa innokkaasti ensimmäistä kirjautumista.\n\nhttps://%s/login/\nKäyttäjä: %s\nSalasana: %s\n\n--\nVesta Hallintapaneeli\n", + + 'FTP login credentials' => 'FTP-tilitiedot', + 'FTP_ACCOUNT_READY' => "FTP-tili on luotu ja odottaa innokkaasti ensimmäistä kirjautumista.\n\nHostname: %s\nKäyttäjä: %s_%s\nSalasana: %s\n\n--\nVesta Hallintapaneeli\n", + + 'Database Credentials' => 'Tietokannan-tilitiedot', + 'DATABASE_READY' => "Tietokanta on luotu onnistuneesti.\n\nTietokanta: %s\nKäyttäjä: %s\nSalasana: %s\n%s\n\n--\nVesta Hallintapaneeli\n", + + 'forgot password' => 'unohditko salasanan?', + 'Confirm' => 'Hyväksy', + 'New Password' => 'Uusi salasana', + 'Confirm Password' => 'Hyväksy salasana', + 'Reset' => 'Nollaa', + 'Reset Code' => 'Nollauskoodi', + 'RESET_NOTICE' => '', + 'RESET_CODE_SENT' => 'Salasanan nollauskoodi on lähetetty sähköpostiisi
', + 'MAIL_RESET_SUBJECT' => 'Salana vaihdettiin %s', + 'PASSWORD_RESET_REQUEST' => "Nollataksesi hallintapaneelin salasanan, seuraa tätä linkkiä:\nhttps://%s/reset/?action=confirm&user=%s&code=%s\n\nVaihtoehtoisesti voit mennä https://%s/reset/?action=code&user=%s ja syöttää nollauskoodin:\n%s\n\nJos et varta vasten pyytänyt tätä salasananvaihtoa, mene paniikkiin ja ota yhteyttä ylläpitoon.\n\n--\nVesta Hallintapaneeli\n", +); diff --git a/web/inc/i18n/fr.php b/web/inc/i18n/fr.php new file mode 100644 index 000000000..b9589fe8a --- /dev/null +++ b/web/inc/i18n/fr.php @@ -0,0 +1,445 @@ + 'Paquets', + 'IP' => 'IP', + 'Graphs' => 'Graphs', + 'Statistics' => 'Statistiques', + 'Log' => 'Log', + 'Services' => 'Services', + 'Updates' => 'Mises-à-jour', + 'Log in' => 'Connexion', + 'Log out' => 'Déconnexion', + + 'USER' => 'USER', + 'WEB' => 'WEB', + 'DNS' => 'DNS', + 'MAIL' => 'MAIL', + 'DB' => 'DB', + 'CRON' => 'CRON', + 'BACKUP' => 'BACKUP', + + 'Add User' => 'Ajouter un Utilisateur', + 'Add Domain' => 'Ajouter un Domaine', + 'Add Web Domain' => 'Ajouter un Domaine', + 'Add DNS Domain' => 'Ajouter un DNS', + 'Add DNS Record' => 'Ajouter un DNS', + 'Add Mail Domain' => 'Ajouter un Domaine', + 'Add Mail Account' => 'Ajouter un Compte', + 'Add Database' => 'Ajouter une BDD', + 'Add Cron Job' => 'Ajouter une Tâche', + 'Create Backup' => 'Créer un Backup', + 'Configure' => 'Configurer', + 'Restore All' => 'Restaurer Tout', + 'Add Package' => 'Ajouter un Paquet', + 'Add IP' => 'Ajouter une IP', + 'Search' => 'Rechercher', + 'Add one more FTP Account' => 'Ajouter un autre Compte FTP', + 'Overall Statistics' => 'Statistiques Générales', + 'Daily' => 'Quotidien', + 'Weekly' => 'Hebdomadaire', + 'Monthly' => 'Mensuel', + 'Yearly' => 'Annuel', + 'Add' => 'Ajouter', + 'Back' => 'Retour', + 'Save' => 'Sauvegarde', + 'Submit' => 'Envoyer', + + 'toggle all' => 'selectionner tout', + 'apply to selected' => 'appliquer à la sélection', + 'rebuild' => 'recréer', + 'rebuild web' => 'recréer web', + 'rebuild dns' => 'recréer dns', + 'rebuild mail' => 'recréer mail', + 'rebuild db' => 'recréer db', + 'rebuild cron' => 'recréer cron', + 'update counters' => 'mettre-à-jour les totaux', + 'suspend' => 'suspendre', + 'unsuspend' => 'réactiver', + 'delete' => 'supprimer', + 'show per user' => 'voir par utilisateur', + 'login as' => 'connexion en tant que', + 'logout' => 'déconnexion', + 'edit' => 'éditer', + 'open webstats' => 'ouvrir les statistiques web', + 'view logs' => 'voir les logs', + 'list records' => '%s enregistrements listés', + 'add record' => 'ajouter un enregistrement', + 'list accounts' => '%s comptes listés', + 'add account' => 'ajouter un compte', + 'open webmail' => 'ouvrir le webmail', + 'open %s' => 'ouvrir %s', + 'download' => 'télécharger', + 'restore' => 'restaurer', + 'configure restore settings' => 'configurer les paramètres de restauration', + 'stop' => 'stop', + 'start' => 'démarrer', + 'restart' => 'redémarrer', + 'update' => 'mettre-à-jour', + 'generate' => 'générer', + 'Generate CSR' => 'Générer un CSR', + 'reread IP' => 'actualiser l\'IP', + 'enable autoupdate' => 'activer la mise-à-jour automatique', + 'disable autoupdate' => 'desactiver la mise-à-jour automatique', + + 'Adding User' => 'Ajout d\'un Utilisateur', + 'Editing User' => 'Edition d\'un Utilisateur', + 'Adding Domain' => 'Ajout d\'un Domaine', + 'Editing Domain' => 'Edition d\'un Domaine', + 'Adding DNS Domain' => 'Ajout d\'un Domaine DNS', + 'Editing DNS Domain' => 'Edition d\'un Domaine DNS', + 'Adding DNS Record' => 'Ajout d\'un Enregistrement DNS', + 'Editing DNS Record' => 'Edition d\'un Enregistrement DNS', + 'Adding Mail Domain' => 'Ajout d\'un Domaine Mail', + 'Editing Mail Domain' => 'Edition d\'un Domaine Mail', + 'Adding Mail Account' => 'Ajout d\'un Compte Mail', + 'Editing Mail Account' => 'Edition d\'un Compte Mail', + 'Adding database' => 'Ajout d\'une base de données', + 'Editing Cron Job' => 'Edition d\'une tâche Cron', + 'Adding Cron Job' => 'Ajout d\'une tâche Cron', + 'Editing Database' => 'Edition d\'une base de données', + 'Adding Package' => 'Ajout d\'un Paquet', + 'Editing Package' => 'Edition d\'un Paquet', + 'Adding IP address' => 'Ajout d\'une adresse IP', + 'Editing IP Address' => 'Edition d\'une adresse IP', + 'Editing Backup Exclusions' => 'Edition des exclusions de Backup', + 'Generating CSR' => 'Génération d\'un jeton CSR', + 'Listing' => 'Listage', + 'Search Results' => 'Résultats de Recherche', + + 'active' => 'actif', + 'spnd' => 'suspendu', + 'suspended' => 'suspendus', + 'running' => 'lancé', + 'stopped' => 'arrêté', + 'outdated' => 'périmé', + 'updated' => 'mis-à-jour', + + 'yes' => 'oui', + 'no' => 'non', + 'none' => 'aucun', + 'pb' => 'po', + 'tb' => 'to', + 'gb' => 'go', + 'mb' => 'mo', + 'minute' => 'minute', + 'hour' => 'heure', + 'day' => 'jour', + 'days' => 'jours', + 'hours' => 'heures', + 'minutes' => 'minutes', + 'month' => 'mois', + 'package' => 'paquet', + 'Bandwidth' => 'Bande Passante', + 'Disk' => 'Disque', + 'Web' => 'Web', + 'Mail' => 'Mail', + 'Databases' => 'Bases de Données', + 'User Directories' => 'Répertoires Utilisateurs', + 'Template' => 'Template', + 'Web Template' => 'Template Apache', + 'Proxy Template' => 'Template Nginx', + 'DNS Template' => 'Template DNS', + 'Web Domains' => 'Domaines Web', + 'SSL Domains' => 'Domaines SSL', + 'Web Aliases' => 'Alias Web', + 'per domain' => 'par domaine', + 'DNS domains' => 'Domaines DNS', + 'DNS domains' => 'Domaines DNS', + 'DNS records' => 'Enregistrements DNS' , + 'Name Servers' => 'Nom des Serveurs', + 'Mail Domains' => 'Domaines Mail', + 'Mail Accounts' => 'Comptes Mail', + 'Cron Jobs' => 'Tâches Cron', + 'SSH Access' => 'Accès SSH', + 'IP Addresses' => 'Adresses IP', + 'Backups' => 'Sauvegardes', + 'Backup System' => 'Système de Sauvegarde', + 'backup exclusions' => 'exclusions', + 'template' => 'template', + 'SSL Support' => 'Support SSL', + 'SSL Home Directory' => 'Racine SSL', + 'Proxy Support' => 'Support Nginx', + 'Proxy Extensions' => 'Extensions Nginx', + 'Web Statistics' => 'Statistiques Web', + 'Additional FTP Account' => 'FTP Additionnel', + 'SOA' => 'SOA', + 'TTL' => 'TTL', + 'Expire' => 'Expiration', + 'Records' => 'Enregistrements', + 'Catchall email' => 'Email de Récupération', + 'AntiVirus Support' => 'Support de l\'AntiVirus', + 'AntiSpam Support' => 'Support de l\'AntiSpam', + 'DKIM Support' => 'Support DKIM', + 'Accounts' => 'Comptes', + 'Quota' => 'Quota', + 'Autoreply' => 'Réponse Automatique', + 'Forward to' => 'Transférer à', + 'Do not store forwarded mail' => 'Ne pas conserver le mail transféré', + 'database' => 'base de données', + 'User' => 'Utilisateur', + 'Host' => 'Serveur', + 'Charset' => 'Charset', + 'Min' => 'Mn', + 'Hour' => 'Heure', + 'Day' => 'Jour', + 'Month' => 'Mois', + 'Day of week' => 'Jour de la semaine', + 'local' => 'local', + 'Run Time' => 'Temps d\'Exécution', + 'Backup Size' => 'Taille de la sauvegarde', + 'SYS' => 'SYS', + 'Domains' => 'Domaines', + 'Status' => 'Statuts', + 'shared' => 'partagé', + 'dedicated' => 'dédié', + 'Owner' => 'Propriétaire', + 'Users' => 'Utilisateurs', + 'Load Average' => 'Charge Moyenne', + 'Memory Usage' => 'Utilisation de la Mémoire', + 'HTTPD Usage' => 'Utilisation HTTPD', + 'NGINX Usage' => 'Utilisation NGINX', + 'MySQL Usage on localhost' => 'Utilisation de MySQL sur localhost', + 'PostgreSQL Usage on localhost' => 'Utilisation de PostgreSQL sur localhost', + 'Bandwidth Usage eth0' => 'Utilisation de la Bande Passante sur eth0', + 'FTP Usage' => 'Utilisation du FTP', + 'SSH Usage' => 'Utilisation SSH', + 'reverse proxy' => 'reverse proxy', + 'web server' => 'serveur web', + 'dns server' => 'serveur dns', + 'mail server' => 'serveur mail', + 'pop/imap server' => 'serveur pop/imap', + 'email antivirus' => 'email antivirus', + 'email antispam' => 'email antispam', + 'database server' => 'serveur de base de données', + 'ftp server' => 'serveur ftp', + 'job scheduler' => 'programmation de tâches', + 'CPU' => 'CPU', + 'Memory' => 'Mémoire', + 'Uptime' => 'Temps de Fonctionnement', + 'core package' => 'paquet de base', + 'php interpreter' => 'interpréteur php', + 'internal web server' => 'serveur web interne', + 'Version' => 'Version', + 'Release' => 'Release', + 'Architecture' => 'Architecture', + 'Object' => 'Objet', + 'Owner' => 'Propriétaire', + 'Username' => 'Nom d\'Utilisateur', + 'Password' => 'Mot de Passe', + 'Email' => 'Email', + 'Package' => 'Paquet', + 'Language' => 'Langue', + 'First Name' => 'Prénom', + 'Last Name' => 'Nom', + 'Send login credentials to email address' => 'Envoyer les identifiants à l\'adresse email', + 'Default Template' => 'Template par défaut', + 'Default Name Servers' => 'Nom de Serveurs par Défaut', + 'Domain' => 'Domaine', + 'DNS Support' => 'Support DNS', + 'Mail Support' => 'Support Email', + 'Advanced options' => 'Options avancées', + 'Aliases' => 'Alias', + 'SSL Certificate' => 'Certificat SSL', + 'SSL Key' => 'Clé SSL', + 'SSL Certificate Authority / Intermediate' => 'Autorité de certification SSL / Intermédiaire', + 'SSL CSR' => 'Jeton CSR SSL', + 'optional' => 'optionnel', + 'internal' => 'interne', + 'Statistics Authorization' => 'Droits d\'Accès aux Statistiques', + 'Statistics Auth' => 'Accès aux Statistiques', + 'Account' => 'Compte', + 'Prefix will be automaticaly added to username' => 'Le préfixe %s sera automatiquement ajouté au nom d\'utilisateur', + 'Send FTP credentials to email' => 'Envoyer les identifiants FTP à l\'adresse email', + 'Expiration Date' => 'Date d\'Expiration', + 'YYYY-MM-DD' => 'YYYY-MM-DD', + 'Name servers' => 'Nom des serveurs', + 'Record' => 'Valeur de l\'Enregistrement', + 'IP or Value' => 'IP ou Valeur', + 'Priority' => 'Priorité', + 'Record Number' => 'Nombre d\'Enregistrements', + 'in megabytes' => 'en mégaoctets', + 'Message' => 'Message', + 'use local-part' => 'utilisation locale', + 'one or more email addresses' => 'une ou plusieurs adresses email', + 'Prefix will be automaticaly added to database name and database user' => 'Le préfixe %s sera automatiquement ajouté au nom de la base de données et de son utilisateur', + 'Database' => 'Base de Données', + 'Type' => 'Type', + 'Minute' => 'Minute', + 'Command' => 'Commande', + 'Package Name' => 'Nom du Paquet', + 'Netmask' => 'Masque Réseau', + 'Interface' => 'Interface', + 'Shared' => 'Partagé', + 'Assigned user' => 'Utilisateur associé', + 'Assigned domain' => 'Domaine associé', + 'NAT IP association' => 'Association NAT IP', + 'shell' => 'shell', + 'web domains' => 'domaines web', + 'web aliases' => 'alias web', + 'dns records' => 'enregistrements dns', + 'mail domains' => 'domaines email', + 'mail accounts' => 'comptes email', + 'accounts' => 'comptes', + 'databases' => 'bases données', + 'cron jobs' => 'tâches cron', + 'backups' => 'sauvegardes', + 'quota' => 'quota', + 'day of week' => 'jour de la semaine', + 'cmd' => 'cmd', + 'users' => 'utilisateurs', + 'disk' => 'disque', + 'traffic' => 'traffic', + 'domains' => 'domaines', + 'aliases' => 'alias', + 'records' => 'enregistrements', + 'jobs' => 'tâches', + 'username' => 'nom d\'utilisateur', + 'password' => 'mot de passe', + 'type' => 'type', + 'charset' => 'charset', + 'domain' => 'domaine', + 'ip' => 'ip', + 'ip address' => 'adresse IP', + 'IP address' => 'Adresse IP', + 'netmask' => 'masque réseau', + 'interface' => 'interface', + 'assigned user' => 'utilisateur associé', + 'ns1' => 'ns1', + 'ns2' => 'ns2', + 'user' => 'utilisateur', + 'email' => 'email', + 'first name' => 'prénom', + 'last name' => 'nom', + 'account' => 'compte', + 'ssl certificate' => 'certificat ssl', + 'ssl key' => 'clé ssl', + 'stats user password' => 'Mot de passe du compte statistiques', + 'stats username' => 'utilisateur statistiques', + 'stats password' => 'mot de passe statistiques', + 'ftp user password' => 'mot de passe ftp', + 'ftp user' => 'utilisateur ftp', + 'Last 70 lines of %s.%s.log' => 'Dernières 70 lignes du fichier %s.%s.log', + 'Download AccessLog' => 'Télécharger le fichier AccessLog', + 'Download ErrorLog' => 'Télécharger le fichier ErrorLog', + 'Country' => 'Pays', + '2 letter code' => 'Code sur 2 lettres', + 'State / Province' => 'Pays / Province', + 'City / Locality' => 'Ville', + 'Organization' => 'Organisation', + + '1 account' => '1 compte', + '%s accounts' => '%s comptes', + '1 domain' => '1 domaine', + '%s domains' => '%s domaines', + '1 record' => '1 enregistrement', + '%s records' => '%s enregistrements', + '1 mail account' => '1 compte email', + '%s mail accounts' => '%s comptes email', + '1 database' => '1 base de données', + '%s databases' => '%s base de données', + '1 cron job' => '1 tâche cron', + '%s cron jobs' => '%s tâches cron', + '1 archive' => '1 archive', + '%s archives' => '%s archives', + '1 package' => '1 paquet', + '%s packages' => '%s paquets', + '1 IP address' => '1 adresse IP', + '%s IP addresses' => '%s adresses IP', + '1 month' => '1 mois', + '%s months' => '%s mois', + '1 log record' => '1 enregistrement', + '%s log records' => '%s enregistrements', + '1 object' => '1 objet', + '%s objects' => '%s objets', + 'no exclusions' => 'pas d\'exclusions', + + 'USER_CREATED_OK' => 'Utilisateur %s créé avec succès.', + 'WEB_DOMAIN_CREATED_OK' => 'Domaine %s créé avec succès.', + 'DNS_DOMAIN_CREATED_OK' => 'Domaine DNS %s créé avec succès.', + 'DNS_RECORD_CREATED_OK' => 'L\'enregistrement %s.%s a été créé avec succès.', + 'MAIL_DOMAIN_CREATED_OK' => 'Le domaine email %s a été créé avec succès.', + 'MAIL_ACCOUNT_CREATED_OK' => 'Le compte email %s@%s a été créé avec succès.', + 'DATABASE_CREATED_OK' => 'La base de données %s a été créée avec succès.', + 'CRON_CREATED_OK' => 'La tâche Cron a été créée avec succès.', + 'IP_CREATED_OK' => 'L\'adresse IP %s a été créée avec succès.', + 'PACKAGE_CREATED_OK' => 'Le paquet %s a été créé avec succès.', + 'SSL_GENERATED_OK' => 'Le certificat a été généré avec succès.', + 'Autoupdate has been successfully enabled' => 'Les mises-à-jour automatiques ont été activées avec succès.', + 'Autoupdate has been successfully disabled' => 'Les mises-à-jour automatiques ont été desactivées avec succès.', + 'Changes has been saved.' => 'Les changements ont été sauvegardés.', + 'Confirmation' => 'Confirmation', + 'DELETE_USER_CONFIRMATION' => 'Êtes-vous sûr de vouloir supprimer l\'utilisateur %s ?', + 'SUSPEND_USER_CONFIRMATION' => 'Êtes-vous sûr de vouloir suspendre l\'utilisateur %s ?', + 'UNSUSPEND_USER_CONFIRMATION' => 'Êtes-vous sûr de vouloir réactiver l\'utilisateur %s ?', + 'DELETE_DOMAIN_CONFIRMATION' => 'Êtes-vous sûr de vouloir supprimer le domaine %s ?', + 'SUSPEND_DOMAIN_CONFIRMATION' => 'Êtes-vous sûr de vouloir suspendre le domaine %s ?', + 'UNSUSPEND_DOMAIN_CONFIRMATION' => 'Êtes-vous sûr de vouloir réactiver le domaine %s ?', + 'DELETE_RECORD_CONFIRMATION' => 'Êtes-vous sûr de vouloir supprimer l\'enregistrement %s ?', + 'SUSPEND_RECORD_CONFIRMATION' => 'Êtes-vous sûr de vouloir suspendre l\'enregistrement %s ?', + 'UNSUSPEND_RECORD_CONFIRMATION' => 'Êtes-vous sûr de vouloir réactiver l\'enregistrement %s ?', + 'DELETE_MAIL_ACCOUNT_CONFIRMATION' => 'Êtes-vous sûr de vouloir supprimer %s ?', + 'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Êtes-vous sûr de vouloir suspendre %s ?', + 'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Êtes-vous sûr de vouloir réactiver %s ?', + 'DELETE_DATABASE_CONFIRMATION' => 'Êtes-vous sûr de vouloir supprimer la base de données %s ?', + 'SUSPEND_DATABASE_CONFIRMATION' => 'Êtes-vous sûr de vouloir suspendre la base de données %s ?', + 'UNSUSPEND_DATABASE_CONFIRMATION' => 'Êtes-vous sûr de vouloir réactiver la base de données %s ?', + 'DELETE_CRON_CONFIRMATION' => 'Êtes-vous sûr de vouloir suprimer la tâche cron ?', + 'SUSPEND_CRON_CONFIRMATION' => 'Êtes-vous sûr de vouloir suspendre la tâche cron ?', + 'UNSUSPEND_CRON_CONFIRMATION' => 'Êtes-vous sûr de vouloir réactiver la tâche cron ?', + 'DELETE_BACKUP_CONFIRMATION' => 'Êtes-vous sûr de vouloir supprimer la sauvergarde %s ?', + 'DELETE_EXCLUSION_CONFIRMATION' => 'Êtes-vous sûr de vouloir supprimer l\'exclusion %s ?', + 'DELETE_PACKAGE_CONFIRMATION' => 'Êtes-vous sûr de vouloir supprimer le paquet %s ?', + 'DELETE_IP_CONFIRMATION' => 'Êtes-vous sûr de vouloir supprimer l\'adresse IP %s ?', + 'RESTART_CONFIRMATION' => 'Êtes-vous sûr de vouloir redémarrer le serveur %s ?', + 'Welcome' => 'Bienvenue', + 'LOGGED_IN_AS' => 'Connecté en tant que %s', + 'Error' => 'Erreur', + 'Invalid username or password' => 'Nom d\'utilisateur ou mot de passe invalide.', + 'Invalid username or code' => 'Nom d\'utilisateur ou code de confirmation invalide.', + 'Passwords not match' => 'Les mots de passe ne correspondent pas.', + 'Please enter valid email address.' => 'Veuillez entrer une adresse email valide.', + 'Field "%s" can not be blank.' => 'Le champ "%s" ne peut être vide.', + 'Password is too short.' => 'Le mot de passe est trop court (6 caractères minimum)', + 'Error code:' => 'Code erreur : %s', + 'SERVICE_ACTION_FAILED' => '"%s" "%s" échouée', + 'IP address is in use' => 'L\'adresse IP est en cours d\'utilisation', + 'BACKUP_SCHEDULED' => 'La tâche a bien été ajoutée à la liste. Vous recevrez un mail de confirmation lorsque la sauvegarde sera prête pour le téléchargement.', + 'BACKUP_EXISTS' => 'La création d\'une sauvegarde est déjà en cours. Veuillez attendre que celle-ci soit terminée.', + 'RESTORE_SCHEDULED' => 'La tâche a bien été ajoutée à la liste. Vous recevrez un mail de confirmation lorsque sera terminée.', + 'RESTORE_EXISTS' => 'La restauration d\'une sauvegarde est déjà en cours. Veuillez attendre que celle-ci soit terminée avant d\en lancer une nouvelle.', + + 'WEB_EXCLUSIONS' => "Entrez les noms de domaines, un par ligne. Pour exclure tous les domaines utilisez *. Pour exclure des répertoires spécifiques utilisez le format suivant : domain.com:public_html/cache:public_html/tmp", + 'DNS_EXCLUSIONS' => "Entrez les noms de domaines, un par ligne. Pour exclure tous les domaines utilisez *.", + 'MAIL_EXCLUSIONS' => "Entrez les domaines, un par ligne. Pour exclure tous les domaines utilisez *. Pour exclure des comptes spécifiques utilisez le format suivant : domain.com:info:support:postmaster", + 'DB_EXCLUSIONS' => "Entrez le nom complet des bases de données, une par ligne. Pour exclure toutes les bases de données utilisez *.", + 'CRON_EXCLUSIONS' => "Pour explure toutes les tâches utilisez *.", + 'USER_EXCLUSIONS' => "Entrez les noms de répertoires, un par ligne. Pour exclure tous les répertoires utilisez *.", + + 'Welcome to Vesta Control Panel' => 'Bienvenue sur l\interface d\'administration Vesta CP', + 'MAIL_FROM' => 'Vesta Control Panel ', + 'GREETINGS_GORDON_FREEMAN' => "Bonjour, %s %s,\n", + 'GREETINGS' => "Bonjour,\n", + 'ACCOUNT_READY' => "Votre compte a été créé avec succès et est prêt à l\'emploi.\n\nhttps://%s/login/\nUtilisateur : %s\nMot de Passe : %s\n\n--\nVesta Control Panel\n", + + 'FTP login credentials' => 'Identifiants de connexion FTP', + 'FTP_ACCOUNT_READY' => "Le compte FTP a été créé avec succès et est prêt à l\'emploi.\n\nHôte : %s\nUtilisateur : %s_%s\nMot de Passe : %s\n\n--\nVesta Control Panel\n", + + 'Database Credentials' => 'Identifiants de connexion à la Base de Données', + 'DATABASE_READY' => "La base de données a été créée avec succès et est prête à l\'emploi.\n\nBase de Données : %s\nUtilisateur : %s\nMot de Passe: %s\n%s\n\n--\nVesta Control Panel\n", + + 'forgot password' => 'mot de passe oublié', + 'Confirm' => 'Confirmer', + 'New Password' => 'Nouveau mot de passe', + 'Confirm Password' => 'Confirmer le mot de passe', + 'Reset' => 'Réinitialiser', + 'Reset Code' => 'Code de Réinitialisation', + 'RESET_NOTICE' => '', + 'RESET_CODE_SENT' => 'Un Code de Réinitialisation de votre mot de passe a été envoyé à votre adresse email
', + 'MAIL_RESET_SUBJECT' => 'Réinitialisation du mot de passe de %s', + 'PASSWORD_RESET_REQUEST' => "Pour réinitialiser votre mot de passe, veuillez suivre le lien suivant :\nhttps://%s/reset/?action=confirm&user=%s&code=%s\n\nSinon, vous pouvez suivre https://%s/reset/?action=code&user=%s et entrer le code de réinitialisation suivant :\n%s\n\nSi vous n'avez pas demandé la réinitialisation de votre mot de passe, veuillez ignorer ce message. Nous vous prions de nous excuser pour la gène occasionnée.\n\n--\nVesta Control Panel\n", +); diff --git a/web/inc/i18n/hu.php b/web/inc/i18n/hu.php new file mode 100644 index 000000000..d5abfbac8 --- /dev/null +++ b/web/inc/i18n/hu.php @@ -0,0 +1,445 @@ + 'Csomagok', + 'IP' => 'IP', + 'Graphs' => 'Grafikonok', + 'Statistics' => 'Statisztikák', + 'Log' => 'Log', + 'Services' => 'Szolgáltatások', + 'Updates' => 'Frissítések', + 'Log in' => 'Belépés', + 'Log out' => 'Kilépés', + + 'USER' => 'USER', + 'WEB' => 'WEB', + 'DNS' => 'DNS', + 'MAIL' => 'MAIL', + 'DB' => 'ADATBÁZIS', + 'CRON' => 'CRON', + 'BACKUP' => 'MENTÉS', + + 'Add User' => 'Új felhasználó', + 'Add Domain' => 'Új domain', + 'Add Web Domain' => 'Új Web Domain', + 'Add DNS Domain' => 'Új DNS Domain', + 'Add DNS Record' => 'Új DNS Record', + 'Add Mail Domain' => 'Új Mail Domain', + 'Add Mail Account' => 'Új Mail fiók', + 'Add Database' => 'Új adatbázis', + 'Add Cron Job' => 'Új Cron Job', + 'Create Backup' => 'Mentés készítése', + 'Configure' => 'Beállítás', + 'Restore All' => 'Összes visszaállítása', + 'Add Package' => 'Csomag hozzáadása', + 'Add IP' => 'Új IP', + 'Add one more FTP Account' => 'Add one more FTP Account', + 'Search' => 'Keresés', + 'Overall Statistics' => 'Átfogó statisztikák', + 'Daily' => 'Napi', + 'Weekly' => 'Heti', + 'Monthly' => 'Havi', + 'Yearly' => 'Éves', + 'Add' => 'Hozzáadás', + 'Back' => 'Vissza', + 'Save' => 'Mentés', + 'Submit' => 'OK', + + 'toggle all' => 'összes kinyit/bezár', + 'apply to selected' => 'alkalmazás a kiválasztottakra', + 'rebuild' => 'újratelepít', + 'rebuild web' => 'web újraépítés', + 'rebuild dns' => 'dns újraépítés', + 'rebuild mail' => 'mail újraépítés', + 'rebuild db' => 'adatbázis újraépítés', + 'rebuild cron' => 'cron újraépítés', + 'update counters' => 'számlálók frissítése', + 'suspend' => 'felfüggeszt', + 'unsuspend' => 'újraaktivál', + 'delete' => 'törlés', + 'show per user' => 'felhasználónként listáz', + 'login as' => 'bejelentkezés, mint', + 'logout' => 'kilépés', + 'edit' => 'szerkesztés', + 'open webstats' => 'statisztikák megnyitása', + 'view logs' => 'logok megnyitása', + 'list records' => '%s record listázása', + 'add record' => 'rekord hozzáadása', + 'list accounts' => '%s fiók listázása', + 'add account' => 'fiók hozzáadása', + 'open webmail' => 'webmail megnyitása', + 'open %s' => '%s megnyitása', + 'download' => 'letöltés', + 'restore' => 'visszaállítás', + 'configure restore settings' => 'visszaállítási beállítások konfigurálása', + 'stop' => 'stop', + 'start' => 'start', + 'restart' => 'újraindítás', + 'update' => 'frissítés', + 'generate' => 'létrehoz', + 'Generate CSR' => 'CSR generálás', + 'reread IP' => 'IP újraolvasása', + 'enable autoupdate' => 'automatikus frissítés engedélyezése', + 'disable autoupdate' => 'automatikus frissítés tiltása', + + 'Adding User' => 'Felhasználó hozzáadása', + 'Editing User' => 'Felhasználó szerkesztése', + 'Adding Domain' => 'Domain hozzáadása', + 'Editing Domain' => 'Domain szerkesztése', + 'Adding DNS Domain' => 'DNS Domain hozzáadása', + 'Editing DNS Domain' => 'DNS Domain szerkesztése', + 'Adding DNS Record' => 'DNS Rekord hozzáadása', + 'Editing DNS Record' => 'DNS Record szerkesztése', + 'Adding Mail Domain' => 'Mail Domain hozzáadása', + 'Editing Mail Domain' => 'Mail Domain szerkesztése', + 'Adding Mail Account' => 'Mail Fiók hozzáadása', + 'Editing Mail Account' => 'Mail Fiók szerkesztése', + 'Adding database' => 'Adatbázis hozzáadása', + 'Editing Cron Job' => 'Cron Job szerkesztése', + 'Adding Cron Job' => 'Cron Job hozzáadása', + 'Editing Database' => 'Adatbázis szerkesztése', + 'Adding Package' => 'Csomag hozzáadása', + 'Editing Package' => 'Csomag szerkesztése', + 'Adding IP address' => 'IP cím hozzáadása', + 'Editing IP Address' => 'IP cím szerkesztése', + 'Editing Backup Exclusions' => 'Mentési kivételek szerkesztése', + 'Generating CSR' => 'CSR generálása', + 'Listing' => 'Listázás', + 'Search Results' => 'Keresési eredmények', + + 'active' => 'aktív', + 'spnd' => 'felfüggesztett', + 'suspended' => 'felfüggesztett', + 'running' => 'fut', + 'stopped' => 'megállított', + 'outdated' => 'elavult', + 'updated' => 'frissített', + + 'yes' => 'igen', + 'no' => 'nem', + 'none' => 'egyik sem', + 'pb' => 'pb', + 'tb' => 'tb', + 'gb' => 'gb', + 'mb' => 'mb', + 'minute' => 'perc', + 'hour' => 'óra', + 'day' => 'nap', + 'days' => 'nap', + 'hours' => 'óra', + 'minutes' => 'perc', + 'month' => 'hónap', + 'package' => 'csomag', + 'Bandwidth' => 'Sávszélesség', + 'Disk' => 'Lemezterület', + 'Web' => 'Web', + 'Mail' => 'Mail', + 'Databases' => 'Adatbázis', + 'User Directories' => 'Felhasználói könyvtárak', + 'Template' => 'Sablon', + 'Web Template' => 'Apache sablon', + 'Proxy Template' => 'Nginx sablon', + 'DNS Template' => 'DNS sablon', + 'Web Domains' => 'Web Domainek', + 'SSL Domains' => 'SSL Domainek', + 'Web Aliases' => 'Web Alias', + 'per domain' => 'domainenként', + 'DNS domains' => 'DNS Domainek', + 'DNS domains' => 'DNS Domainek', + 'DNS records' => 'DNS recordok' , + 'Name Servers' => 'Name Serverek', + 'Mail Domains' => 'Mail Domainek', + 'Mail Accounts' => 'Mail Fiókok', + 'Cron Jobs' => 'Cron Jobs', + 'SSH Access' => 'SSH hozzáférés', + 'IP Addresses' => 'IP Címek', + 'Backups' => 'Mentések', + 'Backup System' => 'Mentési rendszer', + 'backup exclusions' => 'kihagyás a mentésből', + 'template' => 'sablon', + 'SSL Support' => 'SSL támogatás', + 'SSL Home Directory' => 'SSL kezdőlap', + 'Proxy Support' => 'Nginx támogatás', + 'Proxy Extensions' => 'Nginx kiterjesztések', + 'Web Statistics' => 'Web statisztikák', + 'Additional FTP Account' => 'Hozzáadott FTP', + 'SOA' => 'SOA', + 'TTL' => 'TTL', + 'Expire' => 'Lejár', + 'Records' => 'Rekordok', + 'Catchall email' => 'Catchall email', + 'AntiVirus Support' => 'AntiVirus támogatás', + 'AntiSpam Support' => 'AntiSpam támogatás', + 'DKIM Support' => 'DKIM támogatás', + 'Accounts' => 'Fiókok', + 'Quota' => 'Kvóta', + 'Autoreply' => 'Automatikus válasz', + 'Forward to' => 'Továbbítás', + 'Do not store forwarded mail' => 'Továbbított e-mailek mentésének tiltása', + 'database' => 'adatbázis', + 'User' => 'Felhasználó', + 'Host' => 'Hoszt', + 'Charset' => 'Karakterkódolás', + 'Min' => 'Perc', + 'Hour' => 'Óra', + 'Day' => 'Nap', + 'Month' => 'Hónap', + 'Day of week' => 'A hét napja', + 'local' => 'helyi', + 'Run Time' => 'Futási idő', + 'Backup Size' => 'Mentés mérete', + 'SYS' => 'SYS', + 'Domains' => 'Domainek', + 'Status' => 'Státusz', + 'shared' => 'megosztott', + 'dedicated' => 'dedikált', + 'Owner' => 'Tulajdonos', + 'Users' => 'Felhasználók', + 'Load Average' => 'Load átlag', + 'Memory Usage' => 'Memória használat', + 'HTTPD Usage' => 'HTTPD használat', + 'NGINX Usage' => 'NGINX használat', + 'MySQL Usage on localhost' => 'MySQL használat a localhoston', + 'PostgreSQL Usage on localhost' => 'PostgreSQL használat a localhoston', + 'Bandwidth Usage eth0' => 'eth0 sávszélesség használat', + 'FTP Usage' => 'FTP használat', + 'SSH Usage' => 'SSH használat', + 'reverse proxy' => 'fordított proxy', + 'web server' => 'web szerver', + 'dns server' => 'dns szerver', + 'mail server' => 'mail szerver', + 'pop/imap server' => 'pop/imap szerver', + 'email antivirus' => 'email antivirus', + 'email antispam' => 'email antispam', + 'database server' => 'adatbázis szerver', + 'ftp server' => 'ftp szerver', + 'job scheduler' => 'job ütemező', + 'CPU' => 'CPU', + 'Memory' => 'Memória', + 'Uptime' => 'Futási idő', + 'core package' => 'alapcsomag', + 'php interpreter' => 'php értelmező', + 'internal web server' => 'külső web szerver', + 'Version' => 'Verzió', + 'Release' => 'Kiadás', + 'Architecture' => 'Architektúra', + 'Object' => 'Objektum', + 'Owner' => 'Tulajdonos', + 'Username' => 'Felhasználónév', + 'Password' => 'Jelszó', + 'Email' => 'Email', + 'Package' => 'Csomag', + 'Language' => 'Nyelv', + 'First Name' => 'Keresztnév', + 'Last Name' => 'Vezetéknév', + 'Send login credentials to email address' => 'Belépési adatok küldése e-mailben', + 'Default Template' => 'Alapértelmezett sablon', + 'Default Name Servers' => 'Alapértelmezett névszerverek', + 'Domain' => 'Domain', + 'DNS Support' => 'DNS támogatás', + 'Mail Support' => 'Mail támogatás', + 'Advanced options' => 'Haladó beállítások', + 'Aliases' => 'Aliaszok', + 'SSL Certificate' => 'SSL igazolás', + 'SSL Key' => 'SSL kulcs', + 'SSL Certificate Authority / Intermediate' => 'SSL igazolás engedélyezése', + 'SSL CSR' => 'SSL CSR', + 'optional' => 'opcionális', + 'internal' => 'belső', + 'Statistics Authorization' => 'Statisztika engedélyezése', + 'Statistics Auth' => 'Statisztika engedélyezése', + 'Account' => 'Fiók', + 'Prefix will be automaticaly added to username' => 'A(z) %s előtag automatikusan hozzáadásra kerül a felhasználónévhez.', + 'Send FTP credentials to email' => 'FTP adatok küldése e-mailben', + 'Expiration Date' => 'Lejárati dárum', + 'YYYY-MM-DD' => 'ÉÉÉÉ-HH-NN', + 'Name servers' => 'Névszerverek', + 'Record' => 'Rekord', + 'IP or Value' => 'IP avgy érték', + 'Priority' => 'Prioritás', + 'Record Number' => 'Rekord száma', + 'in megabytes' => 'megabájtokban', + 'Message' => 'üzenet', + 'use local-part' => 'helyi rész használata', + 'one or more email addresses' => 'egy vagy több e-mail cím', + 'Prefix will be automaticaly added to database name and database user' => 'A(z) %s előtag automatikusan hozzáadásra kerül az adatbázis felhasználónévhez', + 'Database' => 'Adatbázis', + 'Type' => 'Típus', + 'Minute' => 'Perc', + 'Command' => 'Parancs', + 'Package Name' => 'Csomagnév', + 'Netmask' => 'Netmask', + 'Interface' => 'Interfész', + 'Shared' => 'Megosztott', + 'Assigned user' => 'Hozzárendelt felhasználó', + 'Assigned domain' => 'Hozzárendelt domain', + 'NAT IP association' => 'NAT IP hozzárendelés', + 'shell' => 'rendszerhéj', + 'web domains' => 'web domainek', + 'web aliases' => 'web aliaszok', + 'dns records' => 'dns rekordok', + 'mail domains' => 'mail domainek', + 'mail accounts' => 'mail fiókok', + 'accounts' => 'fiókok', + 'databases' => 'adatbázisok', + 'cron jobs' => 'cron jobs', + 'backups' => 'mentések', + 'quota' => 'kvóta', + 'day of week' => 'a hét napja', + 'cmd' => 'cmd', + 'users' => 'felhasználók', + 'domains' => 'domainek', + 'aliases' => 'aliaszok', + 'records' => 'rekordok', + 'jobs' => 'jobs', + 'username' => 'felhasználónév', + 'password' => 'jelszó', + 'type' => 'típus', + 'charset' => 'karakterkódolás', + 'domain' => 'domain', + 'ip' => 'ip', + 'ip address' => 'ip cím', + 'IP address' => 'IP cím', + 'netmask' => 'netmaszk', + 'interface' => 'interfész', + 'assigned user' => 'hozzárendelt felhasználó', + 'ns1' => 'ns1', + 'ns2' => 'ns2', + 'user' => 'felhasználó', + 'email' => 'email', + 'first name' => 'vezetéknév', + 'last name' => 'keresztnév', + 'account' => 'fiók', + 'ssl certificate' => 'ssl hitelesítés', + 'ssl key' => 'ssl kulcs', + 'stats user password' => 'stats user password', + 'stats username' => 'stats username', + 'stats password' => 'stats password', + 'ftp user password' => 'ftp felhasználónév', + 'ftp user' => 'ftp felhasználó', + 'Last 70 lines of %s.%s.log' => 'A %s.%s.log utolsó 70 sora', + 'Download AccessLog' => 'AccessLog letöltése', + 'Download ErrorLog' => 'ErrorLog letöltése', + 'Country' => 'Ország', + '2 letter code' => '2 Irányítószám', + 'State / Province' => 'Megye', + 'City / Locality' => 'Város', + 'Organization' => 'Szervezet', + + '1 account' => '1 fiók', + '%s accounts' => '%s fiók', + '1 domain' => '1 domain', + '%s domains' => '%s domainek', + '1 record' => '1 rekord', + '%s records' => '%s recordok', + '1 mail account' => '1 mail fiók', + '%s mail accounts' => '%s mail fiókok', + '1 database' => '1 adatbázis', + '%s databases' => '%s adatbázis', + '1 cron job' => '1 cron job', + '%s cron jobs' => '%s cron job', + '1 archive' => '1 archívum', + '%s archives' => '%s archívum', + '1 package' => '1 csomag', + '%s packages' => '%s csomag', + '1 IP address' => '1 IP cím', + '%s IP addresses' => '%s IP cím', + '1 month' => '1 hónap', + '%s months' => '%s hónap', + '1 log record' => '1 log rekord', + '%s log records' => '%s log rekord', + '1 object' => '1 objektum', + '%s objects' => '%s objektum', + 'no exclusions' => 'nincs kihagyás', + + 'USER_CREATED_OK' => '%s felhasználó sikeresen létrehozva.', + 'WEB_DOMAIN_CREATED_OK' => '%s domain sikeresen létrehozva.', + 'DNS_DOMAIN_CREATED_OK' => '%s DNS domain sikeresen létrehozva.', + 'DNS_RECORD_CREATED_OK' => '%s.%s rekord sikeresen létrehozva.', + 'MAIL_DOMAIN_CREATED_OK' => '%s ail domain sikeresen létrehozva.', + 'MAIL_ACCOUNT_CREATED_OK' => '%s@%s mail fiók sikeresen létrehozva.', + 'DATABASE_CREATED_OK' => '%s adatbázis sikeresen létrehozva.', + 'CRON_CREATED_OK' => 'Cron job sikeresen létrehozva.', + 'IP_CREATED_OK' => '%s IP cím sikeresen létrehozva.', + 'PACKAGE_CREATED_OK' => 'A(z) %s csomag sikeresen létrehozva.', + 'SSL_GENERATED_OK' => 'A tanúsítvány sikeresen létrehozva.', + 'Autoupdate has been successfully enabled' => 'Az automatikus frissítés bekapcsolva.', + 'Autoupdate has been successfully disabled' => 'Az automatikus frissítés kikapcsolva.', + 'Changes has been saved.' => 'A módosítások sikeresen mentésre kerültek.', + 'Confirmation' => 'Megerősítés', + 'DELETE_USER_CONFIRMATION' => 'Biztos, hogy törölni szeretnéd %s felhasználót?', + 'SUSPEND_USER_CONFIRMATION' => 'Biztos, hogy felfüggeszted %s felhasználót?', + 'UNSUSPEND_USER_CONFIRMATION' => 'Biztos, hogy újra szeretnéd aktiválni %s felhasználót?', + 'DELETE_DOMAIN_CONFIRMATION' => 'Biztos, hogy törlöd a(z) %s domaint?', + 'SUSPEND_DOMAIN_CONFIRMATION' => 'Biztos, hogy felfüggeszted a(z) %s domaint?', + 'UNSUSPEND_DOMAIN_CONFIRMATION' => 'Biztos, hogy újra szeretnéd aktiválni a(z) %s domaint?', + 'DELETE_RECORD_CONFIRMATION' => 'Biztos, hogy törlöd a(z) %s rekordot?', + 'SUSPEND_RECORD_CONFIRMATION' => 'Biztos, hogy felfüggeszted a(z) %s rekordot?', + 'UNSUSPEND_RECORD_CONFIRMATION' => 'Biztos, hogy újra szeretnéd aktiválni a(z) %s rekordot?', + 'DELETE_MAIL_ACCOUNT_CONFIRMATION' => 'Biztos, hogy törlöd a(z) %s -t?', + 'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Biztos, hogy felfüggeszted a(z) %s -t?', + 'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Biztos, hogy újra szeretnéd aktiválni a(z) %s -t?', + 'DELETE_DATABASE_CONFIRMATION' => 'Biztos, hogy törlöd a(z) %s adatbázist?', + 'SUSPEND_DATABASE_CONFIRMATION' => 'Biztos, hogy újra szeretnéd aktiválni a(z) %s adatbázist?', + 'UNSUSPEND_DATABASE_CONFIRMATION' => 'Biztos, hogy újra szeretnéd aktiválni a(z) %s adatbázist?', + 'DELETE_CRON_CONFIRMATION' => 'Biztos, hogy törlöd a cron job-ot?', + 'SUSPEND_CRON_CONFIRMATION' => 'Biztos, hogy felfüggeszted a cron job-ot?', + 'UNSUSPEND_CRON_CONFIRMATION' => 'Biztos, hogy újra szeretnéd aktiválni a cron job-ot?', + 'DELETE_BACKUP_CONFIRMATION' => 'Biztos, hogy törlöd a(z) %s mentést?', + 'DELETE_EXCLUSION_CONFIRMATION' => 'Biztos, hogy törlöd a(z) %s kivételt?', + 'DELETE_PACKAGE_CONFIRMATION' => 'Biztos, hogy törlöd a(z) %s csomagot?', + 'DELETE_IP_CONFIRMATION' => 'Biztos, hogy törlöd a(z) IP címet?', + 'RESTART_CONFIRMATION' => 'Are you sure you want to restart %s?', + 'Welcome' => 'Üdvözöljük', + 'LOGGED_IN_AS' => 'Belépve, mint %s', + 'Error' => 'Hiba', + 'Invalid username or password' => 'Hibás felhasználónév vagy jelszó', + 'Invalid username or code' => 'Hibás felhasználónév vagy kód', + 'Passwords not match' => 'A jelszavak nem egyeznek meg', + 'Please enter valid email address.' => 'Kérlek valós e-mail címet adj meg!', + 'Field "%s" can not be blank.' => 'A(z) "%s" mező nem lehet üres.', + 'Password is too short.' => 'A jelszó túl rövid.(minimum 6 karakter)', + 'Error code:' => 'Hibakód: %s', + 'SERVICE_ACTION_FAILED' => 'A(z) "%s" "%s" meghiúsult', + 'IP address is in use' => 'Az IP cím használatban van.', + 'BACKUP_SCHEDULED' => 'A feladat végrehajtás alatt. A mentés elkészültéről e-mail értesítést fogunk küldeni.', + 'BACKUP_EXISTS' => 'Egy mentés már folyamatban van. Kérlek várj, míg elkészül.', + 'RESTORE_SCHEDULED' => 'A feladat a végrehajtási sorba került. A mentés elkészültéről e-mail értesítést fogunk küldeni.', + 'RESTORE_EXISTS' => 'Egy visszaállítás már folyamatban van. Kérlek várj, míg elkészül.', + + 'WEB_EXCLUSIONS' => "Írd be a domain nevet, soronként egyet. Az összes kihagyásához használj "*" -ot. Adott könyvtár kihagyásához használd a következő formátumot: domain.com:public_html/cache:public_html/tmp", + 'DNS_EXCLUSIONS' => "Írd be a domain nevet, soronként egyet. Az összes kihagyásához használj "*" -ot.", + 'MAIL_EXCLUSIONS' => "Írd be a domain nevet, soronként egyet. Az összes domain kihagyásához használj "*" -ot. Adott fiók kihagyásához használd a következő formátumot: domain.com:info:support:postmaster", + 'DB_EXCLUSIONS' => "Írd be az adatbázis teljes nevét, soronként egyet. Az összes adatbázis kihagyásához használj "*" -ot", + 'CRON_EXCLUSIONS' => "Az összes job kihagyásához használj "*" -ot.", + 'USER_EXCLUSIONS' => "Írd be a könyvtár nevét, soronként egyet. Az összes kihagyásához használj "*" -ot.", + + 'Welcome to Vesta Control Panel' => 'Üdv, a Kezelőfelület!', + 'MAIL_FROM' => 'Kezelőfelület ', + 'GREETINGS_GORDON_FREEMAN' => "Üdv, %s %s,\n", + 'GREETINGS' => "Üdv,\n", + 'ACCOUNT_READY' => "A fiókod létrejött és készen áll a használatra.\n\nhttps://%s/login/\nFelhasználónév: %s\nJelszó: %s\n\n--\nKezelőfelület\n", + + 'FTP login credentials' => 'FTP belépési adatok', + 'FTP_ACCOUNT_READY' => "Az FTP felhasználó létrejött és készen áll a használatra.\n\nKiszolgáló: %s\nFelhasználónév: %s_%s\nJelszó: %s\n\n--\nKezelőfelület\n", + + 'Database Credentials' => 'Adatbázis adatok', + 'DATABASE_READY' => "Az adatbázis létrejött és készen áll a használatra.\n\nAdatbázis: %s\nFelhasználónév: %s\nJelszó: %s\n%s\n\n--\nKezelőfelület\n", + + 'forgot password' => 'elfelejtett jelszó', + 'Confirm' => 'Megerősít', + 'New Password' => 'Új jelszó', + 'Confirm Password' => 'Jelszó megerősítése', + 'Reset' => 'Visszaállít', + 'Reset Code' => 'Kód újragenerálása', + 'RESET_NOTICE' => '', + 'RESET_CODE_SENT' => 'A jelszó visszaállításhoz szükséges kód elküldésre került az e-mail címedre
', + 'MAIL_RESET_SUBJECT' => 'Jelszó újragenerálás %s -kor', + 'PASSWORD_RESET_REQUEST' => "A panel jelszavad visszaállításához kattints a következő linkre:\nhttps://%s/reset/?action=confirm&user=%s&code=%s\n\nAlternatively, vagy használd a következőt https://%s/reset/?action=code&user=%s és írd be a kódot:\n%s\n\nHa nem Te kérted a visszaállítást, kérlek hagyd figyelmen kívül ezt a levelet.\n\n--\nKezelőfelület\n", +); diff --git a/web/inc/i18n/id.php b/web/inc/i18n/id.php index 783a74559..be50f2daa 100644 --- a/web/inc/i18n/id.php +++ b/web/inc/i18n/id.php @@ -40,6 +40,7 @@ $LANG['id'] = array( 'Restore All' => 'Kembalikan Semua', 'Add Package' => 'Tambah Paket', 'Add IP' => 'Tambah IP', + 'Add one more FTP Account' => 'Tambah satu lagi Pengguna FTP', 'Search' => 'Cari', 'Overall Statistics' => 'Seluruh Statistik', 'Daily' => 'Harian', @@ -332,7 +333,7 @@ $LANG['id'] = array( 'City / Locality' => 'Kota', 'Organization' => 'Organisasi', - '1 account' => '1 pengguna', + '1 account' => '1 pengguna', '%s accounts' => '%s pengguna', '1 domain' => '1 domain', '%s domains' => '%s domains', @@ -395,6 +396,7 @@ $LANG['id'] = array( 'DELETE_EXCLUSION_CONFIRMATION' => 'Pengecualian %s mau dihapus?', 'DELETE_PACKAGE_CONFIRMATION' => 'Paket %s mau dihapus?', 'DELETE_IP_CONFIRMATION' => 'Alamat IP %s beneran mau dihapus?', + 'RESTART_CONFIRMATION' => '%s mau me-restart?', 'Welcome' => 'Selamat Datang', 'LOGGED_IN_AS' => 'Masuk sebagai pengguna %s', 'Error' => 'Kesalahan', diff --git a/web/inc/i18n/it.php b/web/inc/i18n/it.php new file mode 100644 index 000000000..a074ed354 --- /dev/null +++ b/web/inc/i18n/it.php @@ -0,0 +1,444 @@ + 'Pacchetti', + 'IP' => 'IP', + 'Graphs' => 'Grafici', + 'Statistics' => 'Statistiche', + 'Log' => 'Log', + 'Services' => 'Servizi', + 'Updates' => 'Aggiornamenti', + 'Log in' => 'Log in', + 'Log out' => 'Log out', + + 'USER' => 'USER', + 'WEB' => 'WEB', + 'DNS' => 'DNS', + 'MAIL' => 'MAIL', + 'DB' => 'DB', + 'CRON' => 'CRON', + 'BACKUP' => 'BACKUP', + + 'Add User' => 'Nuovo Utente', + 'Add Domain' => 'Nuovo Dominio', + 'Add Web Domain' => 'Nuovo Dominio', + 'Add DNS Domain' => 'Nuova Zona DNS', + 'Add DNS Record' => 'Nuovo Record', + 'Add Mail Domain' => 'Nuovo Dominio', + 'Add Mail Account' => 'Nuovo Account', + 'Add Database' => 'Nuovo Database', + 'Add Cron Job' => 'Nuovo Cron Job', + 'Create Backup' => 'Crea Backup', + 'Configure' => 'Configura', + 'Restore All' => 'Ripristina Tutto', + 'Add Package' => 'Nuovo Pacchetto', + 'Add IP' => 'Aggiungi IP', + 'Search' => 'Cerca', + 'Add one more FTP Account' => 'Nuovo account FTP', + 'Overall Statistics' => 'Statistiche Generali', + 'Daily' => 'Giornaliero', + 'Weekly' => 'Settimanale', + 'Monthly' => 'Mensile', + 'Yearly' => 'Annuale', + 'Add' => 'Aggiungi', + 'Back' => 'Indietro', + 'Save' => 'Salva', + 'Submit' => 'Invia', + + 'toggle all' => 'inverti tutti', + 'apply to selected' => 'applica ai selezionati', + 'rebuild' => 'ricostruisci', + 'rebuild web' => 'ricostruisci web', + 'rebuild dns' => 'ricostruisci dns', + 'rebuild mail' => 'ricostruisci mail', + 'rebuild db' => 'ricostruisci db', + 'rebuild cron' => 'ricostruisci cron', + 'update counters' => 'aggiorna contatori', + 'suspend' => 'sospendi', + 'unsuspend' => 'riabilita', + 'delete' => 'cancella', + 'show per user' => 'mostra per utente', + 'login as' => 'accedi come', + 'logout' => 'logout', + 'edit' => 'modifica', + 'open webstats' => 'apri webstats', + 'view logs' => 'visualizza logs', + 'list records' => 'mostra %s record', + 'add record' => 'nuovo record', + 'list accounts' => 'mostra %s account', + 'add account' => 'aggiungi account', + 'open webmail' => 'apri webmail', + 'open %s' => 'apri %s', + 'download' => 'download', + 'restore' => 'ripristina', + 'configure restore settings' => 'configure restore settings', + 'stop' => 'ferma', + 'start' => 'avvia', + 'restart' => 'riavvia', + 'update' => 'aggiorna', + 'generate' => 'genera', + 'Generate CSR' => 'Genera CSR', + 'reread IP' => 'rileggi IP', + 'enable autoupdate' => 'abilita aggiornamenti automatici', + 'disable autoupdate' => 'disabilita aggiornamenti automatici', + + 'Adding User' => 'Aggiunta Utente', + 'Editing User' => 'Modifica Utente', + 'Adding Domain' => 'Aggiunta Dominio', + 'Editing Domain' => 'Modifica Dominio', + 'Adding DNS Domain' => 'Aggiunta Dominio DNS', + 'Editing DNS Domain' => 'Modifica Dominio DNS', + 'Adding DNS Record' => 'Aggiunta Record DNS', + 'Editing DNS Record' => 'Modifica Record DNS', + 'Adding Mail Domain' => 'Aggiunta Dominio Mail', + 'Editing Mail Domain' => 'Modifica Dominio Mail', + 'Adding Mail Account' => 'Aggiunta Account Mail', + 'Editing Mail Account' => 'Modifica Account Mail', + 'Adding database' => 'Aggiunta database', + 'Editing Cron Job' => 'Modifica Cron Job', + 'Adding Cron Job' => 'Aggiunta Cron Job', + 'Editing Database' => 'Modifica Database', + 'Adding Package' => 'Aggiunta Pacchetto', + 'Editing Package' => 'Modifica Pacchetto', + 'Adding IP address' => 'Aggiunta Indirizzo IP', + 'Editing IP Address' => 'Modifica Indirizzo IP', + 'Editing Backup Exclusions' => 'Modifica Esclusioni Backup', + 'Generating CSR' => 'Genera CSR', + 'Listing' => 'Lista', + 'Search Results' => 'Risultati Ricerca', + + 'active' => 'attivo', + 'spnd' => 'sospeso', + 'suspended' => 'sospeso', + 'running' => 'in esecuzione', + 'stopped' => 'fermato', + 'outdated' => 'obsoleto', + 'updated' => 'aggiornato', + + 'yes' => 'si', + 'no' => 'no', + 'none' => 'nessuno', + 'pb' => 'pb', + 'tb' => 'tb', + 'gb' => 'gb', + 'mb' => 'mb', + 'minute' => 'minuto', + 'hour' => 'ora', + 'day' => 'giorno', + 'days' => 'giorni', + 'hours' => 'ore', + 'minutes' => 'minuti', + 'month' => 'mese', + 'package' => 'pacchetto', + 'Bandwidth' => 'Banda', + 'Disk' => 'Disco', + 'Web' => 'Web', + 'Mail' => 'Mail', + 'Databases' => 'Databases', + 'User Directories' => 'Directories Utente', + 'Template' => 'Template', + 'Web Template' => 'Apache Template', + 'Proxy Template' => 'Nginx Template', + 'DNS Template' => 'DNS Template', + 'Web Domains' => 'Domini Web', + 'SSL Domains' => 'Domini SSL', + 'Web Aliases' => 'Alias Web', + 'per domain' => 'per dominio', + 'DNS Domains' => 'Zone DNS', + 'DNS domains' => 'Zone DNS', + 'DNS records' => 'Record DNS', + 'Name Servers' => 'Name Servers', + 'Mail Domains' => 'Domini Mail', + 'Mail Accounts' => 'Account Mail', + 'Cron Jobs' => 'Cron Jobs', + 'SSH Access' => 'Accesso SSH', + 'IP Addresses' => 'Indirizzi IP', + 'Backups' => 'Backups', + 'Backup System' => 'Sistema Backup', + 'backup exclusions' => 'esclusioni backup', + 'template' => 'template', + 'SSL Support' => 'Supporto SSL', + 'SSL Home Directory' => 'SSL Home', + 'Proxy Support' => 'Supporto Nginx', + 'Proxy Extensions' => 'Estensioni Nginx', + 'Web Statistics' => 'Statistiche Web', + 'Additional FTP Account' => 'FTP Addizionali', + 'SOA' => 'SOA', + 'TTL' => 'TTL', + 'Expire' => 'Scadenza', + 'Records' => 'Record', + 'Catchall email' => 'Catchall email', + 'AntiVirus Support' => 'Supporto AntiVirus', + 'AntiSpam Support' => 'Supporto AntiSpam', + 'DKIM Support' => 'Supporto DKIM', + 'Accounts' => 'Account', + 'Quota' => 'Quota', + 'Autoreply' => 'Autorisposta', + 'Forward to' => 'Inoltra a', + 'Do not store forwarded mail' => 'Non salvare le email inoltrate', + 'database' => 'database', + 'User' => 'Utente', + 'Host' => 'Host', + 'Charset' => 'Charset', + 'Min' => 'Minuto', + 'Hour' => 'Ora', + 'Day' => 'Giorno', + 'Month' => 'Mese', + 'Day of week' => 'Giorno della settimana', + 'local' => 'local', + 'Run Time' => 'Tempo di Esecuzione', + 'Backup Size' => 'Dimensioni Backup', + 'SYS' => 'SYS', + 'Domains' => 'Domini', + 'Status' => 'Stato', + 'shared' => 'condiviso', + 'dedicated' => 'dedicato', + 'Owner' => 'Proprietario', + 'Users' => 'Utenti', + 'Load Average' => 'Carico Medio', + 'Memory Usage' => 'Uso Memoria', + 'HTTPD Usage' => 'Utilizzo HTTPD', + 'NGINX Usage' => 'Utilizzo NGINX', + 'MySQL Usage on localhost' => 'Utilizzo MySQL su localhost', + 'PostgreSQL Usage on localhost' => 'Utilizzo PostgreSQL su localhost', + 'Bandwidth Usage eth0' => 'Utilizzo banda su eth0', + 'FTP Usage' => 'Utilizzo FTP', + 'SSH Usage' => 'Utilizzo SSH', + 'reverse proxy' => 'reverse proxy', + 'web server' => 'web server', + 'dns server' => 'dns server', + 'mail server' => 'mail server', + 'pop/imap server' => 'pop/imap server', + 'email antivirus' => 'email antivirus', + 'email antispam' => 'email antispam', + 'database server' => 'database server', + 'ftp server' => 'ftp server', + 'job scheduler' => 'job scheduler', + 'CPU' => 'CPU', + 'Memory' => 'Memoria', + 'Uptime' => 'Uptime', + 'core package' => 'pacchetto di sistema', + 'php interpreter' => 'interprete php', + 'internal web server' => 'web server interno', + 'Version' => 'Versione', + 'Release' => 'Release', + 'Architecture' => 'Architettura', + 'Object' => 'Oggetto', + 'Owner' => 'Proprietario', + 'Username' => 'Username', + 'Password' => 'Password', + 'Email' => 'Email', + 'Package' => 'Pacchetto', + 'Language' => 'Lingua', + 'First Name' => 'Nome', + 'Last Name' => 'Cognome', + 'Send login credentials to email address' => 'Invia le credenziali di login per email', + 'Default Template' => 'Default Template', + 'Default Name Servers' => 'Default Name Servers', + 'Domain' => 'Dominio', + 'DNS Support' => 'Supporto DNS', + 'Mail Support' => 'Supporto Mail', + 'Advanced options' => 'Opzioni Avanzate', + 'Aliases' => 'Alias Dominio', + 'SSL Certificate' => 'Certificato SSL', + 'SSL Key' => 'SSL Key', + 'SSL Certificate Authority / Intermediate' => 'SSL Certificate Authority / Intermediate', + 'SSL CSR' => 'SSL CSR', + 'optional' => 'opzionale', + 'internal' => 'interno', + 'Statistics Authorization' => 'Autorizzazione Statistiche', + 'Statistics Auth' => 'Statistiche Auth', + 'Account' => 'Account', + 'Prefix will be automaticaly added to username' => 'Il prefisso %s verrà automatiamente aggiunto all\'username', + 'Send FTP credentials to email' => 'Invia le credenziali FTP per email', + 'Expiration Date' => 'Data di scadenza', + 'YYYY-MM-DD' => 'YYYY-MM-DD', + 'Name servers' => 'Name servers', + 'Record' => 'Record', + 'IP or Value' => 'IP o Valore', + 'Priority' => 'Priorità', + 'Record Number' => 'Numero Record', + 'in megabytes' => 'in megabytes', + 'Message' => 'Messaggio', + 'use local-part' => 'usa local-part', + 'one or more email addresses' => 'uno o più indirizzi email', + 'Prefix will be automaticaly added to database name and database user' => 'Il prefisso %s verrà automatiamente aggiunto al nome e all\'utente del database', + 'Database' => 'Database', + 'Type' => 'Tipo', + 'Minute' => 'Minuto', + 'Command' => 'Comando', + 'Package Name' => 'Nome Pacchetto', + 'Netmask' => 'Netmask', + 'Interface' => 'Interfaccia', + 'Shared' => 'Condiviso', + 'Assigned user' => 'Utente Assegnato', + 'Assigned domain' => 'Dominio Assegnato', + 'NAT IP association' => 'Associazione IP NAT', + 'shell' => 'shell', + 'web domains' => 'domini web', + 'web aliases' => 'aliases web', + 'dns records' => 'record dns', + 'mail domains' => 'domini mail', + 'mail accounts' => 'account mail', + 'accounts' => 'account', + 'databases' => 'database', + 'cron jobs' => 'cron jobs', + 'backups' => 'backups', + 'quota' => 'quota', + 'day of week' => 'giorno della settimanta', + 'cmd' => 'cmd', + 'users' => 'users', + 'domains' => 'domini', + 'aliases' => 'alias', + 'records' => 'record', + 'jobs' => 'jobs', + 'username' => 'username', + 'password' => 'password', + 'type' => 'tipo', + 'charset' => 'charset', + 'domain' => 'dominio', + 'ip' => 'ip', + 'ip address' => 'indirizzo ip', + 'IP address' => 'indirizzo IP', + 'netmask' => 'netmask', + 'interface' => 'interfaccia', + 'assigned user' => 'utente assegnato', + 'ns1' => 'ns1', + 'ns2' => 'ns2', + 'user' => 'user', + 'email' => 'email', + 'first name' => 'nome', + 'last name' => 'cognome', + 'account' => 'account', + 'ssl certificate' => 'certificato ssl', + 'ssl key' => 'key ssl', + 'stats user password' => 'stats user password', + 'stats username' => 'stats username', + 'stats password' => 'stats password', + 'ftp user password' => 'ftp user password', + 'ftp user' => 'ftp user', + 'Last 70 lines of %s.%s.log' => 'Ultime 70 righe di %s.%s.log', + 'Download AccessLog' => 'Download AccessLog', + 'Download ErrorLog' => 'Download ErrorLog', + 'Country' => 'Paese', + '2 letter code' => 'codice di 2 lettere', + 'State / Province' => 'Stato / Provincia', + 'City / Locality' => 'Città / Località', + 'Organization' => 'Organizzazione', + + '1 account' => '1 account', + '%s accounts' => '%s account', + '1 domain' => '1 dominio', + '%s domains' => '%s domini', + '1 record' => '1 record', + '%s records' => '%s record', + '1 mail account' => '1 account mail', + '%s mail accounts' => '%s account mail', + '1 database' => '1 database', + '%s databases' => '%s databases', + '1 cron job' => '1 cron job', + '%s cron jobs' => '%s cron jobs', + '1 archive' => '1 archivio', + '%s archives' => '%s archivi', + '1 package' => '1 pacchetto', + '%s packages' => '%s pacchetti', + '1 IP address' => '1 indirizzo IP', + '%s IP addresses' => '%s indirizzi IP', + '1 month' => '1 mese', + '%s months' => '%s mesi', + '1 log record' => '1 log record', + '%s log records' => '%s log record', + '1 object' => '1 oggetto', + '%s objects' => '%s oggetti', + 'no exclusions' => 'senza esclusioni', + + 'USER_CREATED_OK' => 'L\'utente %s è stato creato con successo.', + 'WEB_DOMAIN_CREATED_OK' => 'Il dominio %s è stato creato con successo.', + 'DNS_DOMAIN_CREATED_OK' => 'Il dominio DNS %s è stato creato con successo.', + 'DNS_RECORD_CREATED_OK' => 'Il record %s.%s è stato creato con successo.', + 'MAIL_DOMAIN_CREATED_OK' => 'Dominio Mail %s è stato creato con successo.', + 'MAIL_ACCOUNT_CREATED_OK' => 'L\'account mail %s@%s è stato creato con successo.', + 'DATABASE_CREATED_OK' => 'Il database %s è stato creato con successo.', + 'CRON_CREATED_OK' => 'Il cron job è stato creato con successo.', + 'IP_CREATED_OK' => 'L\'indirizzo IP %s è stato creato con successo.', + 'PACKAGE_CREATED_OK' => 'Il pacchetto %s è stato creato con successo.', + 'SSL_GENERATED_OK' => 'Il certificato è stato generato con successo.', + 'Autoupdate has been successfully enabled' => 'Gli aggiornamenti automatici sono stati abilitati', + 'Autoupdate has been successfully disabled' => 'Gli aggiornamenti automatici sono stati disabilitati', + 'Changes has been saved.' => 'I cambiamenti sono stati salvati.', + 'Confirmation' => 'Conferma', + 'DELETE_USER_CONFIRMATION' => 'Sei sicuro di voler cancellare l\'utente %s?', + 'SUSPEND_USER_CONFIRMATION' => 'Sei sicuro di voler disabilitare l\'utente %s?', + 'UNSUSPEND_USER_CONFIRMATION' => 'Sei sicuro di voler riabilitare l\'utente %s?', + 'DELETE_DOMAIN_CONFIRMATION' => 'Sei sicuro di voler cancellare il dominio %s?', + 'SUSPEND_DOMAIN_CONFIRMATION' => 'Sei sicuro di voler disabilitare il dominio %s?', + 'UNSUSPEND_DOMAIN_CONFIRMATION' => 'Sei sicuro di voler riabilitare il dominio %s?', + 'DELETE_RECORD_CONFIRMATION' => 'Sei sicuro di voler cancellare il record %s?', + 'SUSPEND_RECORD_CONFIRMATION' => 'Sei sicuro di voler disabilitare il record %s?', + 'UNSUSPEND_RECORD_CONFIRMATION' => 'Sei sicuro di voler riabilitare il record %s?', + 'DELETE_MAIL_ACCOUNT_CONFIRMATION' => 'Sei sicuro di voler cancellare %s?', + 'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Sei sicuro di voler disabilitare %s?', + 'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Sei sicuro di voler riabilitare %s?', + 'DELETE_DATABASE_CONFIRMATION' => 'Sei sicuro di voler cancellare il database %s?', + 'SUSPEND_DATABASE_CONFIRMATION' => 'Sei sicuro di voler disabilitare il database %s?', + 'UNSUSPEND_DATABASE_CONFIRMATION' => 'Sei sicuro di voler riabilitare il database %s?', + 'DELETE_CRON_CONFIRMATION' => 'Sei sicuro di voler cancellare il cron job?', + 'SUSPEND_CRON_CONFIRMATION' => 'Sei sicuro di voler disabilitare il cron job?', + 'UNSUSPEND_CRON_CONFIRMATION' => 'Sei sicuro di voler riabilitare il cron job?', + 'DELETE_BACKUP_CONFIRMATION' => 'Sei sicuro di voler cancellare il backup %s?', + 'DELETE_EXCLUSION_CONFIRMATION' => 'Sei sicuro di voler cancellare l\'esclusione %s?', + 'DELETE_PACKAGE_CONFIRMATION' => 'Sei sicuro di voler cancellare il pacchetto %s?', + 'DELETE_IP_CONFIRMATION' => 'Sei sicuro di voler l\'indirizoz IP %s?', + 'RESTART_CONFIRMATION' => 'Sei sicuro di voler riavviare %s?', + 'Welcome' => 'Benvenuto', + 'LOGGED_IN_AS' => 'Connesso come l\'utente %s', + 'Error' => 'Errore', + 'Invalid username or password' => 'Username o password non validi', + 'Invalid username or code' => 'Esername o codice non validi', + 'Passwords not match' => 'Le passwords non coincidono', + 'Please enter valid email address.' => 'Inserisci un\'indirizzo email valido.', + 'Field "%s" can not be blank.' => 'Il campo "%s" non può essere lasciato vuoto.', + 'Password is too short.' => 'La password è troppo corta (minimo 6 caratteri)', + 'Error code:' => 'Codice errore: %s', + 'SERVICE_ACTION_FAILED' => '"%s" "%s" fallita', + 'IP address is in use' => 'L\'indirizzo IP è già in uso', + 'BACKUP_SCHEDULED' => 'L\'operazione è stata aggiunta alla coda. Riceverai una notifica via email quando il tuo backup sarà pronto per il download.', + 'BACKUP_EXISTS' => 'È già in corso la creazione di un backup. Perfavore attendi che il backup finisca.', + 'RESTORE_SCHEDULED' => 'L\'operazione è stata aggiunta alla coda. Riceverai una notifica via email quando il tuo backup sarà pronto per il download.', + 'RESTORE_EXISTS' => 'È già in corso un\'oprazione di ripristino. Attendi che finisca prima di rilanciarla nuovamento.', + + 'WEB_EXCLUSIONS' => "Scrivi un nome di dominio per riga. Per escludere tutti i domini usa *. Per escludere directory specifiche usa il formato: domain.com:public_html/cache:public_html/tmp", + 'DNS_EXCLUSIONS' => "Scrivi un nome di dominio per riga. Per escludere tutti i domini usa *", + 'MAIL_EXCLUSIONS' => "Scrivi un nome di dominio per riga. Per escludere tutti i domini usa *. Per escludere account specifici usare il formato: domain.com:info:support:postmaster", + 'DB_EXCLUSIONS' => "Scrivi un nome completo di database per riga. Per escludere tutti i database usa *", + 'CRON_EXCLUSIONS' => "Per escludere tutti i cron job usa *", + 'USER_EXCLUSIONS' => "Scrivi un nome di directory per riga. Per escludere tutte le directory usa *", + + 'Welcome to Vesta Control Panel' => 'Benvenuto nel Vesta Control Panel', + 'MAIL_FROM' => 'Vesta Control Panel ', + 'GREETINGS_GORDON_FREEMAN' => "Ciao, %s %s,\n", + 'GREETINGS' => "Ciao,\n", + 'ACCOUNT_READY' => "Il tuo account è stato creato ed è pronto per l\'utilizzo.\n\nhttps://%s/login/\nUsername: %s\nPassword: %s\n\n--\nVesta Control Panel\n", + + 'FTP login credentials' => 'Credenziali login FTP', + 'FTP_ACCOUNT_READY' => "L\'account FTP è stato creato ed è pronto per l\'uso.\n\nHostname: %s\nUsername: %s_%s\nPassword: %s\n\n--\nVesta Control Panel\n", + + 'Database Credentials' => 'Credenziali Database', + 'DATABASE_READY' => "Il database è stato creato con successo.\n\nDatabase: %s\nUser: %s\nPassword: %s\n%s\n\n--\nVesta Control Panel\n", + + 'forgot password' => 'password dimenticata', + 'Confirm' => 'Conferma', + 'New Password' => 'Nuova Password', + 'Confirm Password' => 'Conferma Password', + 'Reset' => 'Reset', + 'Reset Code' => 'Codice Reset', + 'RESET_NOTICE' => '', + 'RESET_CODE_SENT' => 'Il codice di reset per la tua password ti è stato inviato per email
', + 'MAIL_RESET_SUBJECT' => 'Password Reset per %s', + 'PASSWORD_RESET_REQUEST' => "Per fare il reset della password per il pannello di controllo clicca sul link:\nhttps://%s/reset/?action=confirm&user=%s&code=%s\n\nAlternativamente puoi andare su https://%s/reset/?action=code&user=%s e inserire questo codice di reset:\n%s\n\nSe non hai richiesto il reset della tua password, ignora questa email.\n\n--\nVesta Control Panel\n", +); diff --git a/web/inc/i18n/nl.php b/web/inc/i18n/nl.php index f64918c8f..2eb4a1d63 100644 --- a/web/inc/i18n/nl.php +++ b/web/inc/i18n/nl.php @@ -38,6 +38,7 @@ $LANG['nl'] = array( 'Restore All' => 'Herstel alles', 'Add Package' => 'Pakket toevoegen', 'Add IP' => 'IP toevoegen', + 'Add one more FTP Account' => 'Extra FTP-account toevoegen', 'Search' => 'Zoeken', 'Overall Statistics' => 'Globale statistieken', 'Daily' => 'Dagelijks', @@ -393,6 +394,7 @@ $LANG['nl'] = array( 'DELETE_EXCLUSION_CONFIRMATION' => 'Weet u zeker dat u uitsluitingen %s wilt verwijderen?', 'DELETE_PACKAGE_CONFIRMATION' => 'Weet u zeker dat u het pakket %s wilt verwijderen?', 'DELETE_IP_CONFIRMATION' => 'Weet u zeker dat u het IP-adres %s wilt verwijderen?', + 'RESTART_CONFIRMATION' => 'Weet u zeker dat %s wilt herstarten?', 'Welcome' => 'Welkom', 'LOGGED_IN_AS' => 'Ingelogd als gebruiker %s', 'Error' => 'Fout', diff --git a/web/inc/i18n/no.php b/web/inc/i18n/no.php index 7a601ff5c..971b9f73d 100644 --- a/web/inc/i18n/no.php +++ b/web/inc/i18n/no.php @@ -39,6 +39,7 @@ $LANG['no'] = array( 'Add Package' => 'Legg til Pakke', 'Add IP' => 'Legg til IP', 'Search' => 'Søk', + 'Add one more FTP Account' => 'Legg til én FTP Konto', 'Overall Statistics' => 'Samlede Statistikker', 'Daily' => 'Daglig', 'Weekly' => 'Ukentlig', @@ -330,7 +331,7 @@ $LANG['no'] = array( 'City / Locality' => 'By / Beliggenhet', 'Organization' => 'Organisasjon', - '1 account' => '1 konto', + '1 account' => '1 konto', '%s accounts' => '%s kontoer', '1 domain' => '1 domene', '%s domains' => '%s domener', @@ -393,6 +394,7 @@ $LANG['no'] = array( 'DELETE_EXCLUSION_CONFIRMATION' => 'Er du sikker på at du vil slette %s eksklusjon?', 'DELETE_PACKAGE_CONFIRMATION' => 'Er du sikker på at du vil slette pakken %s?', 'DELETE_IP_CONFIRMATION' => 'Er du sikker på at du vil slette IP Addressen %s?', + 'RESTART_CONFIRMATION' => 'Er du sikker på at du vil omstarte %s?', 'Welcome' => 'Velkommen', 'LOGGED_IN_AS' => 'Logget inn som %s', 'Error' => 'Feil', diff --git a/web/inc/i18n/pt.php b/web/inc/i18n/pt.php index ae6d0a086..0b6dc94b6 100644 --- a/web/inc/i18n/pt.php +++ b/web/inc/i18n/pt.php @@ -38,6 +38,7 @@ $LANG['pt'] = array( 'Add Package' => 'Adicionar Pacote', 'Add IP' => 'Adicionar IP', 'Search' => 'Pesquisar', + 'Add one more FTP Account' => 'Adicionar mais uma conta FTP', 'Overall Statistics' => 'Estatísticas Gerais', 'Daily' => 'Diário', 'Weekly' => 'Semanal', @@ -392,6 +393,7 @@ $LANG['pt'] = array( 'DELETE_EXCLUSION_CONFIRMATION' => 'Tem certeza que deseja deletar o exclusões %s?', 'DELETE_PACKAGE_CONFIRMATION' => 'Tem certeza que deseja deletar o pacote %s?', 'DELETE_IP_CONFIRMATION' => 'Tem certeza que deseja deletar o endereço IP %s?', + 'RESTART_CONFIRMATION' => 'Tem certeza que deseja reiniciar %s?', 'Welcome' => 'Bem Vindo', 'LOGGED_IN_AS' => 'Entrar como o usuário %s', 'Error' => 'Erro', diff --git a/web/inc/i18n/ro.php b/web/inc/i18n/ro.php index c659275b8..aca021c5f 100644 --- a/web/inc/i18n/ro.php +++ b/web/inc/i18n/ro.php @@ -40,6 +40,7 @@ $LANG['ro'] = array( 'Add Package' => 'Adăugare pachet', 'Add IP' => 'Adăugare IP', 'Search' => 'Сăutare', + 'Add one more FTP Account' => 'Inca un FTP count', 'Overall Statistics' => 'Statistică rezumativă', 'Daily' => 'Zilnic', 'Weekly' => 'Săptămânal', @@ -394,6 +395,7 @@ $LANG['ro'] = array( 'DELETE_EXCLUSION_CONFIRMATION' => 'Ești sigur că dorești să ștergi excludere %s?', 'DELETE_PACKAGE_CONFIRMATION' => 'Ești sigur că dorești să ștergi %s', 'DELETE_IP_CONFIRMATION' => 'Ești sigur că dorești să șterge IP %s?', + 'RESTART_CONFIRMATION' => 'Ești sigur că dorești să restartezi %s?', 'Welcome' => 'Bun venit', 'LOGGED_IN_AS' => 'Ai intrat ca utilizator %s', 'Error' => 'Eroare', diff --git a/web/inc/i18n/ru.php b/web/inc/i18n/ru.php index 89e877d3c..6dad5bac9 100644 --- a/web/inc/i18n/ru.php +++ b/web/inc/i18n/ru.php @@ -40,6 +40,7 @@ $LANG['ru'] = array( 'Add Package' => 'Добавить пакет', 'Add IP' => 'Добавить IP', 'Search' => 'Поиск', + 'Add one more FTP Account' => 'Добавить еще один FTP аккаунт', 'Overall Statistics' => 'Сводная статистика', 'Daily' => 'Ежедневые', 'Weekly' => 'Еженедельные', @@ -394,6 +395,7 @@ $LANG['ru'] = array( 'DELETE_EXCLUSION_CONFIRMATION' => 'Вы уверены, что хотите удалить исключение %s?', 'DELETE_PACKAGE_CONFIRMATION' => 'Вы уверены, что хотите удалить пакет %s?', 'DELETE_IP_CONFIRMATION' => 'Вы уверены, что хотите удалить IP адрес %s?', + 'RESTART_CONFIRMATION' => 'Вы уверены, что хотите перезагрузить %s?', 'Welcome' => 'Добро пожаловать', 'LOGGED_IN_AS' => 'Вы вошли как пользователь %s', 'Error' => 'Ошибка', diff --git a/web/inc/i18n/ua.php b/web/inc/i18n/ua.php index 4bb39c6c1..ed3eef9f9 100644 --- a/web/inc/i18n/ua.php +++ b/web/inc/i18n/ua.php @@ -4,9 +4,9 @@ * COLOBOCman (colobocman@gmail.com) * Alex Connor (alex_connor@icloud.com) */ - + $LANG['ua'] = array( - + 'Packages' => 'Пакети', 'IP' => 'IP', 'Graphs' => 'Графіки', @@ -16,7 +16,7 @@ $LANG['ua'] = array( 'Updates' => 'Оновлення', 'Log in' => 'Увійти', 'Log out' => 'Вийти', - + 'USER' => 'USER', 'WEB' => 'WEB', 'DNS' => 'DNS', @@ -24,7 +24,7 @@ $LANG['ua'] = array( 'DB' => 'DB', 'CRON' => 'CRON', 'BACKUP' => 'BACKUP', - + 'Add User' => 'Додати акаунт', 'Add Domain' => 'Додати домен', 'Add Web Domain' => 'Додати WEB домен', @@ -39,6 +39,7 @@ $LANG['ua'] = array( 'Restore All' => 'Відновити все', 'Add Package' => 'Додати пакет', 'Add IP' => 'Додати IP', + 'Add one more FTP Account' => 'Додати ще один FTP акаунт', 'Search' => 'Пошук', 'Overall Statistics' => 'Загальна статистика', 'Daily' => 'Щоденні', @@ -49,7 +50,7 @@ $LANG['ua'] = array( 'Back' => 'Назад', 'Save' => 'Зберегти', 'Submit' => 'Відправити', - + 'toggle all' => 'виділити все', 'apply to selected' => 'застосувати до вибраних', 'rebuild' => 'перестворити', @@ -86,7 +87,7 @@ $LANG['ua'] = array( 'reread IP' => 'оновити IP', 'enable autoupdate' => 'увімкнути автооновлення', 'disable autoupdate' => 'вимкнути автооновлення', - + 'Adding User' => 'Додавання акаунту', 'Editing User' => 'Редагування акаунту', 'Adding Domain' => 'Додавання домену', @@ -111,7 +112,7 @@ $LANG['ua'] = array( 'Generating CSR' => 'Генерування CSR запиту', 'Listing' => 'Список', 'Search Results' => 'Результати пошуку', - + 'active' => 'активне', 'spnd' => 'заблоковано', 'suspended' => 'заблокований', @@ -119,7 +120,7 @@ $LANG['ua'] = array( 'stopped' => 'зупинений', 'outdated' => 'застарілий', 'updated' => 'оновлений', - + 'yes' => 'так', 'no' => 'ні', 'none' => 'нема', @@ -356,7 +357,7 @@ $LANG['ua'] = array( '1 object' => 'об`єктів на сторінці: 1', '%s objects' => 'об`єктів на сторінці: %s', 'no exclusions' => 'немає виключень', - + 'USER_CREATED_OK' => 'Аккаунт %s успішно створено', 'WEB_DOMAIN_CREATED_OK' => 'Домен %s успішно створено.', 'DNS_DOMAIN_CREATED_OK' => 'Домен %s успішно створено.', @@ -394,6 +395,7 @@ $LANG['ua'] = array( 'DELETE_EXCLUSION_CONFIRMATION' => 'Ви впевнені, що хочете видалити вийняток %s?', 'DELETE_PACKAGE_CONFIRMATION' => 'Ви впевнені, що хочете видалити пакет %s?', 'DELETE_IP_CONFIRMATION' => 'Ви впевнені, що хочете видалити IP адресу %s?', + 'RESTART_CONFIRMATION' => 'Ви впевнені, що хочете перезапустити %s?', 'Welcome' => 'Ласкаво просимо', 'LOGGED_IN_AS' => 'Ви увійшли як користувач %s', 'Error' => 'Помилка', @@ -417,19 +419,19 @@ $LANG['ua'] = array( 'DB_EXCLUSIONS' => "Вкажіть бази по одній на рядок. Для того, щоб виключити всі, використовуйте *", 'CRON_EXCLUSIONS' => "Для того, щоб виключити всі завдання, використовуйте *", 'USER_EXCLUSIONS' => "Вкажіть теки по одній на рядок. Для того, щоб виключити всі, використовуйте *", - + 'Welcome to Vesta Control Panel' => 'Вітаємо в панелі керування Vesta', 'MAIL_FROM' => 'Vesta Control Panel ', 'GREETINGS_GORDON_FREEMAN' => "Вітаємо, %s %s,\n", 'GREETINGS' => "Вітаємо,\n", 'ACCOUNT_READY' => "Ваш аккаунт успішно створений і готовий до використання.\n\nhttps://%s/login/\nІм`я користувача: %s\nПароль: %s\n\n--\nПанель керування Vesta\n", - + 'FTP login credentials' => 'Дані доступу до FTP', 'FTP_ACCOUNT_READY' => "FTP аккаунт успішно створений і готовий до використання.\n\nХост: %s\nІм`я користувача: %s_%s\nПароль: %s\n\n--\nПанель керування Vesta\n", - + 'Database Credentials' => 'Дані доступу до БД', 'DATABASE_READY' => "База даних успішно створена.\n\nБаза даних: %s\nКористувач: %s\nПароль: %s\n%s\n\n--\nПанель керування Vesta\n", - + 'forgot password' => 'нагадати', 'Confirm' => 'Підтвердити', 'New Password' => 'Новий пароль', diff --git a/web/inc/main.php b/web/inc/main.php index abd34fb26..2ce468130 100644 --- a/web/inc/main.php +++ b/web/inc/main.php @@ -151,12 +151,12 @@ function humanize_time($usage) { } function humanize_usage($usage) { - if ( $usage > 1000 ) { - $usage = $usage / 1000; - if ( $usage > 1000 ) { - $usage = $usage / 1000 ; - if ( $usage > 1000 ) { - $usage = $usage / 1000 ; + if ( $usage > 1024 ) { + $usage = $usage / 1024; + if ( $usage > 1024 ) { + $usage = $usage / 1024 ; + if ( $usage > 1024 ) { + $usage = $usage / 1024 ; $usage = number_format($usage, 2); $usage = $usage."".__('pb'); } else { diff --git a/web/js/events.js b/web/js/events.js index f183ba831..881eadcfa 100644 --- a/web/js/events.js +++ b/web/js/events.js @@ -102,7 +102,7 @@ VE.helpers.createConfirmationDialog = function(elm, dialog_title, confirmed_loca $(this).dialog("destroy"); }, buttons: { - "Ok": function(event, ui) { + "OK": function(event, ui) { location.href = confirmed_location_url; }, "Cancel": function() { diff --git a/web/js/pages/add.web.js b/web/js/pages/add.web.js index 8b06b14a0..d350a4375 100644 --- a/web/js/pages/add.web.js +++ b/web/js/pages/add.web.js @@ -1,37 +1,158 @@ -// -// -// Updates ftp username dynamically, showing its prefix App.Actions.WEB.update_ftp_username_hint = function(elm, hint) { if (hint.trim() == '') { $(elm).parent().find('.hint').html(''); - } - // remove prefix from value in order to eliminate duplicates + } + + hint = hint.replace(/[^\w\d]/gi, ''); + if (hint.indexOf(GLOBAL.FTP_USER_PREFIX) == 0) { hint = hint.slice(GLOBAL.FTP_USER_PREFIX.length, hint.length); } - + $(elm).parent().find('.v-ftp-user').val(hint); $(elm).parent().find('.hint').text(GLOBAL.FTP_USER_PREFIX + hint); } -// -// listener that triggers ftp user hint updating App.Listeners.WEB.keypress_ftp_username = function() { - var ref = $('input[name="v_ftp_user"]'); - var current_val = ref.val(); - if (current_val.trim() != '') { - App.Actions.DB.update_ftp_username_hint(ref, current_val); - } - - ref.bind('keypress input', function(evt) { + var ftp_user_inputs = $('.v-ftp-user'); + $.each(ftp_user_inputs, function(i, ref) { + var ref = $(ref); + var current_val = ref.val(); + if (current_val.trim() != '') { + App.Actions.WEB.update_ftp_username_hint(ref, current_val); + } + + ref.bind('keypress', function(evt) { + clearTimeout(window.frp_usr_tmt); + window.frp_usr_tmt = setTimeout(function() { + var elm = $(evt.target); + App.Actions.WEB.update_ftp_username_hint(elm, $(elm).val()); + }, 100); + }); + }); +} + +App.Listeners.WEB.keypress_domain_name = function() { + $('#v_domain').bind('keypress', function(evt) { clearTimeout(window.frp_usr_tmt); window.frp_usr_tmt = setTimeout(function() { - var elm = $(evt.target); - App.Actions.WEB.update_ftp_username_hint(elm, $(elm).val()); + //var elm = $(evt.target); + //App.Actions.WEB.update_ftp_username_hint(elm, $(elm).val()); + var domain = $('.ftp-path-prefix').text(GLOBAL.FTP_USER_PREPATH + '/' + $('#v_domain').val()); }, 100); }); } +// +// + +App.Actions.WEB.update_ftp_path_hint = function(elm, hint) { + if (hint.trim() == '') { + $(elm).parent().find('.v-ftp-path-hint').html(''); + } + + if (hint[0] != '/') { + hint = '/' + hint; + } + hint = hint.replace(/\/(\/+)/g, '/'); + + $(elm).parent().find('.v-ftp-path-hint').text(hint); +} + +App.Listeners.WEB.keypress_ftp_path = function() { + var ftp_path_inputs = $('.v-ftp-path'); + $.each(ftp_path_inputs, function(i, ref) { + var ref = $(ref); + var current_val = ref.val(); + if (current_val.trim() != '') { + App.Actions.WEB.update_ftp_path_hint(ref, current_val); + } + + ref.bind('keypress', function(evt) { + clearTimeout(window.frp_usr_tmt); + window.frp_usr_tmt = setTimeout(function() { + var elm = $(evt.target); + App.Actions.WEB.update_ftp_path_hint(elm, $(elm).val()); + }, 100); + }); + }); +} + +// +// +App.Actions.WEB.add_ftp_user_form = function() { + var ref = $('#templates').find('.ftptable').clone(true); + var index = $('.data-col2 .ftptable').length + 1; + + ref.find('input').each(function(i, elm) { + var attr_value = $(elm).attr('name').replace('%INDEX%', index); + $(elm).attr('name', attr_value); + }); + + ref.find('.ftp-user-number').text(index); + + $('.data-col2 .ftptable:last').after(ref); + + var index = 1; + $('.data-col2 .ftp-user-number:visible').each(function(i, o) { + $(o).text(index); + index += 1; + }); +} + +App.Actions.WEB.remove_ftp_user = function(elm) { + var ref = $(elm).parents('.ftptable'); + ref.remove(); + + var index = 1; + $('.data-col2 .ftp-user-number:visible').each(function(i, o) { + $(o).text(index); + index += 1; + }); + + if ($('.ftptable-nrm:visible').length == 0) { + $('.v-add-new-user').hide(); + $('input[name="v_ftp"]').attr('checked', false); + } +} + + +App.Actions.WEB.toggle_additional_ftp_accounts = function(elm) { + if ($(elm).attr('checked')) { + $('.ftptable-nrm, .v-add-new-user, .add-new-ftp-user-button').show(); + $('.ftptable-nrm').each(function(i, elm) { + var login = $(elm).find('.v-ftp-user'); + if (login.val().trim() != '') { + $(elm).find('.v-ftp-user-deleted').val(0); + } + }); + } + else { + $('.ftptable-nrm, .v-add-new-user, .add-new-ftp-user-button').hide(); + $('.ftptable-nrm').each(function(i, elm) { + var login = $(elm).find('.v-ftp-user'); + if (login.val().trim() != '') { + $(elm).find('.v-ftp-user-deleted').val(1); + } + }); + } + + if ($('.ftptable-nrm:visible').length == 0) { + var ref = $('#templates').find('.ftptable').clone(true); + var index = $('.data-col2 .ftptable').length + 1; + + ref.find('input').each(function(i, elm) { + var attr_value = $(elm).attr('name').replace('%INDEX%', index); + $(elm).attr('name', attr_value); + }); + + ref.find('.ftp-user-number').text(index); + + $('.v-add-new-user').parent('tr').prev().find('td').html(ref); + } +} + // // Page entry point -// Trigger listeners App.Listeners.WEB.keypress_ftp_username(); +App.Listeners.WEB.keypress_ftp_path(); +App.Listeners.WEB.keypress_domain_name(); diff --git a/web/js/pages/edit.web.js b/web/js/pages/edit.web.js index fc9be3fcf..5d8ede2f2 100644 --- a/web/js/pages/edit.web.js +++ b/web/js/pages/edit.web.js @@ -1,29 +1,138 @@ App.Actions.WEB.update_ftp_username_hint = function(elm, hint) { if (hint.trim() == '') { $(elm).parent().find('.hint').html(''); - } + } + + hint = hint.replace(/[^\w\d]/gi, ''); + if (hint.indexOf(GLOBAL.FTP_USER_PREFIX) == 0) { hint = hint.slice(GLOBAL.FTP_USER_PREFIX.length, hint.length); } + $(elm).parent().find('.v-ftp-user').val(hint); $(elm).parent().find('.hint').text(GLOBAL.FTP_USER_PREFIX + hint); } App.Listeners.WEB.keypress_ftp_username = function() { - var ref = $('input[name="v_ftp_user"]'); - var current_val = ref.val(); - if (current_val.trim() != '') { - App.Actions.DB.update_ftp_username_hint(ref, current_val); + var ftp_user_inputs = $('.v-ftp-user'); + $.each(ftp_user_inputs, function(i, ref) { + var ref = $(ref); + var current_val = ref.val(); + if (current_val.trim() != '') { + App.Actions.WEB.update_ftp_username_hint(ref, current_val); + } + + ref.bind('keypress', function(evt) { + clearTimeout(window.frp_usr_tmt); + window.frp_usr_tmt = setTimeout(function() { + var elm = $(evt.target); + App.Actions.WEB.update_ftp_username_hint(elm, $(elm).val()); + }, 100); + }); + }); +} + +// +// + +App.Actions.WEB.update_ftp_path_hint = function(elm, hint) { + if (hint.trim() == '') { + $(elm).parent().find('.v-ftp-path-hint').html(''); + } + + if (hint[0] != '/') { + hint = '/' + hint; } - ref.bind('keypress', function(evt) { - clearTimeout(window.frp_usr_tmt); - window.frp_usr_tmt = setTimeout(function() { - var elm = $(evt.target); - App.Actions.WEB.update_ftp_username_hint(elm, $(elm).val()); - }, 100); + hint = hint.replace(/\/(\/+)/g, '/'); + + $(elm).parent().find('.v-ftp-path-hint').text(hint); +} + +App.Listeners.WEB.keypress_ftp_path = function() { + var ftp_path_inputs = $('.v-ftp-path'); + $.each(ftp_path_inputs, function(i, ref) { + var ref = $(ref); + var current_val = ref.val(); + if (current_val.trim() != '') { + App.Actions.WEB.update_ftp_path_hint(ref, current_val); + } + + ref.bind('keypress', function(evt) { + clearTimeout(window.frp_usr_tmt); + window.frp_usr_tmt = setTimeout(function() { + var elm = $(evt.target); + App.Actions.WEB.update_ftp_path_hint(elm, $(elm).val()); + }, 100); + }); }); } +// +// +App.Actions.WEB.add_ftp_user_form = function() { + var ref = $('#templates').find('.ftptable').clone(true); + var index = $('.data-col2 .ftptable').length + 1; + + ref.find('input').each(function(i, elm) { + var attr_value = $(elm).attr('name').replace('%INDEX%', index); + $(elm).attr('name', attr_value); + }); + + ref.find('.ftp-user-number').text(index); + + $('.data-col2 .ftptable:last').after(ref); + + var index = 1; + $('.data-col2 .ftp-user-number:visible').each(function(i, o) { + $(o).text(index); + index += 1; + }); +} + +App.Actions.WEB.remove_ftp_user = function(elm) { + var ref = $(elm).parents('.ftptable'); + ref.find('.v-ftp-user-deleted').val('1'); + if (ref.find('.v-ftp-user-is-new').val() == 1) { + ref.remove(); + return true; + } + ref.removeClass('ftptable-nrm'); + ref.hide(); + + var index = 1; + $('.data-col2 .ftp-user-number:visible').each(function(i, o) { + $(o).text(index); + index += 1; + }); + + if ($('.ftptable-nrm:visible').length == 0) { + $('.add-new-ftp-user-button').hide(); + $('input[name="v_ftp"]').attr('checked', false); + } +} + +App.Actions.WEB.toggle_additional_ftp_accounts = function(elm) { + if ($(elm).attr('checked')) { + $('.ftptable-nrm, .v-add-new-user, .add-new-ftp-user-button').show(); + $('.ftptable-nrm').each(function(i, elm) { + var login = $(elm).find('.v-ftp-user'); + if (login.val().trim() != '') { + $(elm).find('.v-ftp-user-deleted').val(0); + } + }); + } + else { + $('.ftptable-nrm, .v-add-new-user, .add-new-ftp-user-button').hide(); + $('.ftptable-nrm').each(function(i, elm) { + var login = $(elm).find('.v-ftp-user'); + if (login.val().trim() != '') { + $(elm).find('.v-ftp-user-deleted').val(1); + } + }); + } +} + // // Page entry point App.Listeners.WEB.keypress_ftp_username(); +App.Listeners.WEB.keypress_ftp_path(); diff --git a/web/js/templates.js b/web/js/templates.js index ee5aeda60..e91f2f799 100644 --- a/web/js/templates.js +++ b/web/js/templates.js @@ -66,7 +66,7 @@ var Templator = function() { 'undefined' == typeof App.Templates._indexes[key] ? App.Templates._indexes[key] = {} : false; 'undefined' == typeof App.Templates._indexes[key][ref_key] ? - App.Templates._indexes[key][ref_key] = {} : false; + App.Templates._indexes[key][ref_key] = {} : false; jQuery(tpl).each(function(index, o) { if (':' == o.charAt(0)) { @@ -84,8 +84,8 @@ var Templator = function() Templator.getTemplate = function(ns, key){ return [ - App.Templates._indexes[ns][key], - App.Templates.html[ns][key].slice(0) + App.Templates._indexes[ns][key], + App.Templates.html[ns][key].slice(0) ]; } // init templator diff --git a/web/search/index.php b/web/search/index.php index bdb9a7166..fc5ffd069 100644 --- a/web/search/index.php +++ b/web/search/index.php @@ -25,7 +25,7 @@ include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); top_panel($user,$TAB); $lang = 'ru_RU.utf8'; -setlocale(LC_ALL, $lang); +//setlocale(LC_ALL, $lang); // Data if ($_SESSION['user'] == 'admin') { diff --git a/web/templates/admin/add_cron.html b/web/templates/admin/add_cron.html index c988cba9b..ac998b9c1 100644 --- a/web/templates/admin/add_cron.html +++ b/web/templates/admin/add_cron.html @@ -34,7 +34,7 @@ - @@ -44,7 +44,7 @@ - @@ -54,7 +54,7 @@ - @@ -64,7 +64,7 @@ - @@ -74,7 +74,7 @@ - @@ -84,22 +84,22 @@ -
+
+
+
+
+
+
- > + >
- - diff --git a/web/templates/admin/add_db.html b/web/templates/admin/add_db.html index 933b10c12..b864043b4 100644 --- a/web/templates/admin/add_db.html +++ b/web/templates/admin/add_db.html @@ -5,7 +5,7 @@ } else { $back = "location.href='".$back."'"; } - ?> + ?>
+ +
@@ -54,60 +54,45 @@ - - - - - @@ -119,13 +104,13 @@ if ((!empty($v_type)) && ( $value == $v_type )) echo ' selected'; echo ">".$value.""; } - ?> + ?> - @@ -137,14 +122,14 @@ if ((!empty($v_host)) && ( $key == $v_host )) echo ' selected'; echo ">".$key.""; } - ?> + ?> - @@ -189,8 +174,8 @@ - @@ -201,10 +186,10 @@
+
- + +
- - -
- + +
- -
+ /
- +
- + +
- + +
- + +
- + +
- - diff --git a/web/templates/admin/add_dns.html b/web/templates/admin/add_dns.html index c7d042594..c78393d3a 100644 --- a/web/templates/admin/add_dns.html +++ b/web/templates/admin/add_dns.html @@ -45,7 +45,7 @@
+ +
- @@ -55,7 +55,7 @@ - @@ -65,15 +65,15 @@ - -
+
+
+
- +
+ - @@ -83,7 +83,7 @@ - @@ -93,7 +93,7 @@ - @@ -123,10 +123,10 @@
+ ()
+ TTL
+
- - diff --git a/web/templates/admin/add_dns_rec.html b/web/templates/admin/add_dns_rec.html index 4fb6ad71b..f79eb0b2d 100644 --- a/web/templates/admin/add_dns_rec.html +++ b/web/templates/admin/add_dns_rec.html @@ -34,7 +34,7 @@
+ +
- @@ -44,7 +44,7 @@ - @@ -55,7 +55,7 @@ - @@ -78,7 +78,7 @@ - @@ -88,7 +88,7 @@ - @@ -100,10 +100,10 @@
+
+
+
+
+ ()
- - diff --git a/web/templates/admin/add_ip.html b/web/templates/admin/add_ip.html index 2957bd6c4..6bb0ec5fe 100644 --- a/web/templates/admin/add_ip.html +++ b/web/templates/admin/add_ip.html @@ -45,7 +45,7 @@
+ +
- @@ -55,7 +55,7 @@ - @@ -65,7 +65,7 @@ - @@ -83,25 +83,20 @@ - - - - -
+
+
+
- + +
- onclick="javascript:elementHideShow('usrtable');"> -
+ - - - @@ -127,7 +122,7 @@ - @@ -141,10 +136,10 @@
+
+
+ ()
+ ()
- - diff --git a/web/templates/admin/add_mail.html b/web/templates/admin/add_mail.html index 3c839b482..3f284b7dc 100644 --- a/web/templates/admin/add_mail.html +++ b/web/templates/admin/add_mail.html @@ -34,7 +34,7 @@
+ +
- @@ -44,42 +44,27 @@ - - - - - - - - - - - -
+
- + +
- > + +
- -
- > -
- -
- > + +
- - diff --git a/web/templates/admin/add_mail_acc.html b/web/templates/admin/add_mail_acc.html index bbf943e62..65afefeab 100644 --- a/web/templates/admin/add_mail_acc.html +++ b/web/templates/admin/add_mail_acc.html @@ -55,7 +55,7 @@
+ +
- @@ -65,7 +65,7 @@ - @@ -75,25 +75,25 @@ - - -
+
+
+ /
- +
+
+ - @@ -103,7 +103,7 @@ - @@ -113,7 +113,7 @@ - @@ -123,26 +123,20 @@ - - - - -
+ ()
+ ()
+ ()
- + +
- > -
- - diff --git a/web/templates/admin/add_package.html b/web/templates/admin/add_package.html index 56777f656..833b088e2 100644 --- a/web/templates/admin/add_package.html +++ b/web/templates/admin/add_package.html @@ -35,7 +35,7 @@
+ +
- @@ -45,7 +45,7 @@ - @@ -68,7 +68,7 @@ - @@ -91,7 +91,7 @@ - @@ -114,7 +114,7 @@ - @@ -137,7 +137,7 @@ - @@ -147,7 +147,7 @@ - @@ -157,7 +157,7 @@ - @@ -167,7 +167,7 @@ - @@ -177,7 +177,7 @@ - @@ -187,7 +187,7 @@ - @@ -197,7 +197,7 @@ - @@ -207,7 +207,7 @@ - @@ -217,7 +217,7 @@ - @@ -227,7 +227,7 @@ - @@ -237,7 +237,7 @@ - @@ -247,7 +247,7 @@ - @@ -274,10 +274,10 @@
+
+
+
+
+
+
+ ()
+
+ ()
+
+ ()
+
+
+
+ ()
+ ()
+
- - diff --git a/web/templates/admin/add_user.html b/web/templates/admin/add_user.html index 3a400b5a9..a61a4a8b2 100644 --- a/web/templates/admin/add_user.html +++ b/web/templates/admin/add_user.html @@ -53,7 +53,7 @@
+ +
- @@ -70,17 +70,17 @@ - @@ -90,7 +90,7 @@ - @@ -114,7 +114,7 @@ - @@ -140,7 +140,7 @@ - @@ -150,7 +150,7 @@ - @@ -160,7 +160,7 @@ - @@ -173,10 +173,10 @@
+
+ /
- +
+
+
+
+
+
- - diff --git a/web/templates/admin/add_web.html b/web/templates/admin/add_web.html index 6f50d67a5..b8522c1ab 100644 --- a/web/templates/admin/add_web.html +++ b/web/templates/admin/add_web.html @@ -42,7 +42,7 @@ document.v_add_web.v_stats_password.value = webrandom; } - function FTPrandom() { + function FTPrandom(elm) { var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz"; var string_length = 10; var ftprandomstring = ''; @@ -50,7 +50,7 @@ var rnum = Math.floor(Math.random() * chars.length); ftprandomstring += chars.substring(rnum,rnum+1); } - document.v_add_web.v_ftp_password.value = ftprandomstring; + $(elm).parents('.ftptable').find('.v-ftp-user-psw').val(ftprandomstring); } function elementHideShow(elementToHideOrShow){ @@ -75,7 +75,7 @@
+ +
- @@ -85,7 +85,7 @@ - @@ -107,34 +107,24 @@ - - - - - - - - -
+
+
- + +
- > + +
- -
- > -
+
- @@ -144,25 +134,20 @@ - - - -
+
- -
- onclick="javascript:elementHideShow('proxytable');"> + +
- - @@ -170,26 +155,21 @@ - - - -
+
+
- / + + /
- onclick="javascript:elementHideShow('ssltable');"> -
- - - - - - - - @@ -234,7 +214,7 @@ - @@ -256,20 +236,15 @@ - - - - - - - - -
+
+
+
+
+
+
+ ()
+
+
- + +
- onclick="javascript:elementHideShow('statstable');"> -
+ - @@ -279,73 +254,104 @@ -
+
+ /
- +
- + +
- onclick="javascript:elementHideShow('ftptable');"> -
- - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + +
-
- -
- -
- / -
- - -
- class="ftptable ftptable-nrm" name="v_add_domain_ftp"> +
+ # () + + +
+
+ +
+ name="v_ftp_user[][v_ftp_user]" > + +
+ / +
+ + +
+ + +
+ +
+ + +
+ - - @@ -354,7 +360,71 @@
+ +
+ + + diff --git a/web/templates/admin/edit_backup_exclusions.html b/web/templates/admin/edit_backup_exclusions.html index 770966eb5..e2f974d78 100644 --- a/web/templates/admin/edit_backup_exclusions.html +++ b/web/templates/admin/edit_backup_exclusions.html @@ -38,7 +38,7 @@
- @@ -48,7 +48,7 @@ - @@ -58,7 +58,7 @@ - @@ -68,7 +68,7 @@ - @@ -78,7 +78,7 @@ - @@ -88,7 +88,7 @@ - @@ -100,10 +100,10 @@
+
+
+
+
+
+
- - diff --git a/web/templates/admin/edit_cron.html b/web/templates/admin/edit_cron.html index 9a6cd1bcb..786180a0b 100644 --- a/web/templates/admin/edit_cron.html +++ b/web/templates/admin/edit_cron.html @@ -40,7 +40,7 @@
+ +
- @@ -50,7 +50,7 @@ - @@ -60,7 +60,7 @@ - @@ -70,7 +70,7 @@ - @@ -80,7 +80,7 @@ - @@ -90,22 +90,22 @@ -
+
+
+
+
+
+
- > + >
- - @@ -113,4 +113,4 @@
+ +
- + \ No newline at end of file diff --git a/web/templates/admin/edit_db.html b/web/templates/admin/edit_db.html index 8a7af352d..96111abdd 100644 --- a/web/templates/admin/edit_db.html +++ b/web/templates/admin/edit_db.html @@ -61,7 +61,7 @@
- @@ -72,7 +72,7 @@ - @@ -83,17 +83,17 @@ - @@ -103,7 +103,7 @@ - @@ -113,7 +113,7 @@ - @@ -125,10 +125,10 @@
+
+
+ /
- +
+
+
- - diff --git a/web/templates/admin/edit_dns.html b/web/templates/admin/edit_dns.html index 017ffca65..ff28fc8e5 100644 --- a/web/templates/admin/edit_dns.html +++ b/web/templates/admin/edit_dns.html @@ -40,7 +40,7 @@
+ +
- @@ -50,7 +50,7 @@ - @@ -60,7 +60,7 @@ - @@ -81,7 +81,7 @@ - @@ -91,7 +91,7 @@ - @@ -101,7 +101,7 @@ - @@ -113,10 +113,10 @@
+
+
+
+ ()
+ SOA
+ TTL
- - diff --git a/web/templates/admin/edit_dns_rec.html b/web/templates/admin/edit_dns_rec.html index ad900fa75..b9e5f97c8 100644 --- a/web/templates/admin/edit_dns_rec.html +++ b/web/templates/admin/edit_dns_rec.html @@ -40,7 +40,7 @@
+ +
- @@ -51,7 +51,7 @@ - @@ -61,7 +61,7 @@ - @@ -71,7 +71,7 @@ - @@ -81,7 +81,7 @@ - @@ -91,7 +91,7 @@ - @@ -104,10 +104,10 @@
+
+
+
+
+ ()
+ ()
- - diff --git a/web/templates/admin/edit_ip.html b/web/templates/admin/edit_ip.html index 49e97b1c5..a166a2d14 100644 --- a/web/templates/admin/edit_ip.html +++ b/web/templates/admin/edit_ip.html @@ -52,7 +52,7 @@
+ +
- @@ -62,7 +62,7 @@ - @@ -72,7 +72,7 @@ - @@ -82,35 +82,36 @@ - - - - - - - - - @@ -120,7 +121,7 @@ - @@ -133,10 +134,10 @@
+
+
+
- + +
- + + + + + + + + +
+ +
+ +
- -
- -
+ ()
+ ()
- - @@ -144,4 +145,4 @@
+ +
- + \ No newline at end of file diff --git a/web/templates/admin/edit_mail.html b/web/templates/admin/edit_mail.html index 4f4e82006..e9317d1c2 100644 --- a/web/templates/admin/edit_mail.html +++ b/web/templates/admin/edit_mail.html @@ -40,7 +40,7 @@
- @@ -50,37 +50,22 @@ - - - - - - - - - - - - - @@ -92,10 +77,10 @@
+
- + +
- > + +
- + +
- > -
- -
- > -
+
- - diff --git a/web/templates/admin/edit_mail_acc.html b/web/templates/admin/edit_mail_acc.html index c427685b1..1ca35090a 100644 --- a/web/templates/admin/edit_mail_acc.html +++ b/web/templates/admin/edit_mail_acc.html @@ -62,7 +62,7 @@
+ +
- @@ -74,17 +74,17 @@ - @@ -94,7 +94,7 @@ - @@ -104,7 +104,7 @@ - @@ -114,27 +114,17 @@ - - - - - - - - -
+
+ /
- + ()
+ ()
+ ()
- + +
- > + +
- -
- onclick="javascript:elementHideShow('autoreplytable');"> -
+
@@ -152,10 +142,10 @@
- - diff --git a/web/templates/admin/edit_package.html b/web/templates/admin/edit_package.html index 079d637b5..e7248659e 100644 --- a/web/templates/admin/edit_package.html +++ b/web/templates/admin/edit_package.html @@ -40,7 +40,7 @@
+ +
- @@ -51,7 +51,7 @@ - @@ -74,7 +74,7 @@ - @@ -97,7 +97,7 @@ - @@ -120,7 +120,7 @@ - @@ -143,7 +143,7 @@ - @@ -153,7 +153,7 @@ - @@ -163,7 +163,7 @@ - @@ -173,7 +173,7 @@ - @@ -183,7 +183,7 @@ - @@ -193,7 +193,7 @@ - @@ -203,7 +203,7 @@ - @@ -213,7 +213,7 @@ - @@ -223,7 +223,7 @@ - @@ -233,7 +233,7 @@ - @@ -243,7 +243,7 @@ - @@ -253,7 +253,7 @@ - @@ -280,10 +280,10 @@
+
+
+
+
+
+
+ ()
+
+ ()
+
+ ()
+
+
+
+ ()
+ ()
+
- - diff --git a/web/templates/admin/edit_user.html b/web/templates/admin/edit_user.html index c1b93a3c5..bec90e90d 100644 --- a/web/templates/admin/edit_user.html +++ b/web/templates/admin/edit_user.html @@ -52,7 +52,7 @@
+ +
- @@ -62,17 +62,17 @@ - @@ -82,7 +82,7 @@ - @@ -103,7 +103,7 @@ - @@ -127,7 +127,7 @@ - @@ -137,7 +137,7 @@ - @@ -147,7 +147,7 @@ - @@ -168,7 +168,7 @@ - @@ -195,10 +195,10 @@
+
+ /
- +
+
+
+
+
+
+
- - diff --git a/web/templates/admin/edit_web.html b/web/templates/admin/edit_web.html index 3ef861501..dd2696ce5 100644 --- a/web/templates/admin/edit_web.html +++ b/web/templates/admin/edit_web.html @@ -10,12 +10,15 @@ @@ -36,7 +39,7 @@ document.v_edit_web.v_stats_password.value = webrandom; } - function FTPrandom() { + function FTPrandom(elm) { var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz"; var string_length = 10; var ftprandomstring = ''; @@ -44,7 +47,8 @@ var rnum = Math.floor(Math.random() * chars.length); ftprandomstring += chars.substring(rnum,rnum+1); } - document.v_edit_web.v_ftp_password.value = ftprandomstring; + + $(elm).parents('.ftptable').find('.v-ftp-user-psw').val(ftprandomstring); } function elementHideShow(elementToHideOrShow){ @@ -72,7 +76,7 @@
+ +
→ ".$_SESSION['ok_msg'].""; + } if (!empty($_SESSION['error_msg'])) { echo " → ".$_SESSION['error_msg'].""; - } else { - if (!empty($_SESSION['ok_msg'])) { - echo " → ".$_SESSION['ok_msg'].""; - } + } + if (!empty($_SESSION['flash_error_msg'])) { + echo " / FTP USER ".$_SESSION['flash_error_msg'].""; + unset($_SESSION['flash_error_msg']); } ?> - @@ -82,7 +86,7 @@ - @@ -105,7 +109,7 @@ - @@ -115,7 +119,7 @@ - @@ -136,20 +140,15 @@ - - - - -
+
+
+
+
- + +
- onclick="javascript:elementHideShow('proxytable');"> -
+ - @@ -173,7 +172,7 @@ - @@ -186,21 +185,16 @@ - - - - -
+
+
- / + + /
- onclick="javascript:elementHideShow('ssltable');"> -
+ - @@ -218,7 +212,7 @@ - @@ -228,7 +222,7 @@ - @@ -238,7 +232,7 @@ - @@ -251,7 +245,7 @@ - @@ -273,20 +267,15 @@ - - - - - - - - - + + + +
+
+
+
+ ()
+
- + +
- onclick="javascript:elementHideShow('statstable');"> -
+ - @@ -296,80 +285,106 @@ -
+
+ /
- +
- + +
- onclick="javascript:elementHideShow('ftptable');"> -
- + + $ftp_user): ?> + +
- - + + + - - - - -
- - ' . __('Prefix will be automaticaly added to username',$user."_") . '' ?> + + # () + +
- +
+ +
+ name="v_ftp_user[][v_ftp_user]" >
- / + + /
- + - + +
- + +
+ +
+ +
+ + +
- - @@ -378,7 +393,74 @@
+ +
+ + + + diff --git a/web/templates/admin/list_backup.html b/web/templates/admin/list_backup.html index 837c5b81c..b532f6b4e 100644 --- a/web/templates/admin/list_backup.html +++ b/web/templates/admin/list_backup.html @@ -1,6 +1,6 @@ -