diff --git a/bin/v_add_web_domain b/bin/v_add_web_domain index cd615c3bd..4854b20e4 100755 --- a/bin/v_add_web_domain +++ b/bin/v_add_web_domain @@ -133,14 +133,14 @@ chown root:apache $conf # Changing file permissions chmod 660 $conf chmod 551 $HOMEDIR/$user/web/$domain -chmod 751 $HOMEDIR/$user/web/$domain/private -chmod 751 $HOMEDIR/$user/web/$domain/cgi-bin -chmod 751 $HOMEDIR/$user/web/$domain/public_html -chmod 751 $HOMEDIR/$user/web/$domain/public_shtml -chmod 751 $HOMEDIR/$user/web/$domain/document_errors -chmod -f -R 775 $HOMEDIR/$user/web/$domain/cgi-bin/* -chmod -f -R 775 $HOMEDIR/$user/web/$domain/public_html/* -chmod -f -R 775 $HOMEDIR/$user/web/$domain/document_errors/* +chmod 771 $HOMEDIR/$user/web/$domain/private +chmod 771 $HOMEDIR/$user/web/$domain/cgi-bin +chmod 771 $HOMEDIR/$user/web/$domain/public_html +chmod 771 $HOMEDIR/$user/web/$domain/public_shtml +chmod 771 $HOMEDIR/$user/web/$domain/document_errors +chmod -f -R 665 $HOMEDIR/$user/web/$domain/cgi-bin/* +chmod -f -R 665 $HOMEDIR/$user/web/$domain/public_html/* +chmod -f -R 665 $HOMEDIR/$user/web/$domain/document_errors/* chmod 551 $HOMEDIR/$user/web/$domain/stats chmod 551 $HOMEDIR/$user/web/$domain/logs chmod 640 /var/log/httpd/domains/$domain.* @@ -169,9 +169,10 @@ increase_user_value "$user" '$U_WEB_ALIASES' # Defining domain variables str="DOMAIN='$domain' IP='$ip' IP6='' ALIAS='$aliases' TPL='$template'" -str="$str CGI='yes' ELOG='yes' SSL='no' SSL_HOME='single' NGINX=''" -str="$str NGINX_EXT='' STATS='' STATS_USER='' STATS_CRYPT='' U_DISK='0'" -str="$str U_BANDWIDTH='0' SUSPENDED='no' TIME='$TIME' DATE='$DATE'" +str="$str CGI='yes' ELOG='yes' SSL='no' SSL_HOME='same' FTP_USER=''" +str="$str FTP_MD5='' NGINX='' NGINX_EXT='' STATS='' STATS_USER=''" +str="$str STATS_CRYPT='' U_DISK='0' U_BANDWIDTH='0' SUSPENDED='no'" +str="$str TIME='$TIME' DATE='$DATE'" # Registering domain echo "$str" >> $USER_DATA/web.conf diff --git a/bin/v_add_web_domain_ftp b/bin/v_add_web_domain_ftp new file mode 100755 index 000000000..dae270be5 --- /dev/null +++ b/bin/v_add_web_domain_ftp @@ -0,0 +1,71 @@ +#!/bin/bash +# info: add ftp account for web domain. +# options: user domain ftp_user ftp_password +# +# The function creates addutional ftp account for web domain. + + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +# Argument defenition +user=$1 +domain=$(idn -t --quiet -u "$2" ) +domain_idn=$(idn -t --quiet -a "$domain") +ftp_user=${1}_${3} +ftp_password=$4 + +# Includes +source $VESTA/conf/vesta.conf +source $VESTA/func/main.sh +source $VESTA/func/domain.sh + +# Hiding password +A4='******' +EVENT="DATE='$DATE' TIME='$TIME' CMD='$SCRIPT' A1='$A1' A2='$A2' A3='$A3'" +EVENT="$EVENT A4='$A4' A5='$A5' A6='$A6' A7='$A7' A8='$A8' A9='$A9'" + +#----------------------------------------------------------# +# Verifications # +#----------------------------------------------------------# + +check_args '4' "$#" 'user domain ftp_user ftp_password' +validate_format 'user' 'domain' 'ftp_user' 'ftp_password' +is_system_enabled "$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" + + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +# Get domain values +get_domain_values 'web' +if [ ! -z "$FTP_USER" ]; then + /usr/sbin/userdel $FTP_USER +fi + +# Adding user +/usr/sbin/adduser $ftp_user -g $user -s /sbin/nologin -M \ + -d "$HOMEDIR/$user/web/$domain" > /dev/null 2>&1 +echo "$ftp_password" | /usr/bin/passwd "$ftp_user" --stdin &>/dev/null +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" +update_object_value 'web' 'DOMAIN' "$domain" '$FTP_MD5' "$ftp_md5" + +# Logging +log_history "added ftp account $ftp_user for $domain" +log_event "$OK" "$EVENT" + +exit diff --git a/bin/v_change_web_domain_ftp b/bin/v_change_web_domain_ftp new file mode 100755 index 000000000..e870a67b4 --- /dev/null +++ b/bin/v_change_web_domain_ftp @@ -0,0 +1,62 @@ +#!/bin/bash +# info: add ftp account for web domain. +# options: user domain ftp_user ftp_password +# +# The function creates addutional ftp account for web domain. + + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +# Argument defenition +user=$1 +domain=$(idn -t --quiet -u "$2" ) +domain_idn=$(idn -t --quiet -a "$domain") +ftp_user=${1}_${3} +ftp_password=$4 + +# Includes +source $VESTA/conf/vesta.conf +source $VESTA/func/main.sh +source $VESTA/func/domain.sh + + +#----------------------------------------------------------# +# Verifications # +#----------------------------------------------------------# + +check_args '4' "$#" 'user domain ftp_user ftp_password' +validate_format 'user' 'domain' 'ftp_user' 'ftp_password' +is_system_enabled "$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_empty 'web' 'DOMAIN' "$domain" '$FTP_USER' + + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +# Adding user +/usr/sbin/adduser $ftp_user -g $user -s /sbin/nologin -M \ + -d "$HOMEDIR/$user/web/$domain" > /dev/null 2>&1 +echo "$ftp_password" | /usr/bin/passwd "$ftp_user" --stdin &>/dev/null +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" +update_object_value 'web' 'DOMAIN' "$domain" '$FTP_MD5' "$ftp_md5" + +# Logging +log_history "added ftp account $ftp_user for $domain" +log_event "$OK" "$EVENT" + +exit diff --git a/bin/v_delete_web_domain b/bin/v_delete_web_domain index abcd051f8..a207e994f 100755 --- a/bin/v_delete_web_domain +++ b/bin/v_delete_web_domain @@ -87,6 +87,11 @@ if [ ! -z "$STATS" ] && [ "$STATS" != 'no' ]; then rm -f $HOMEDIR/$user/conf/web/$STATS.$domain.conf fi +# Deleting ftp account +if [ ! -z "$FTP_USER" ]; then + /usr/sbin/userdel $FTP_USER +fi + # Deleting directory rm -rf $HOMEDIR/$user/web/$domain diff --git a/bin/v_delete_web_domain_ftp b/bin/v_delete_web_domain_ftp new file mode 100755 index 000000000..80942be77 --- /dev/null +++ b/bin/v_delete_web_domain_ftp @@ -0,0 +1,58 @@ +#!/bin/bash +# info: delete webdomain ftp account. +# options: user domain +# +# The function deletes additional ftp account. + + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +# Argument defenition +user=$1 +domain=$(idn -t --quiet -u "$2" ) +domain_idn=$(idn -t --quiet -a "$domain") + +# Includes +source $VESTA/conf/vesta.conf +source $VESTA/func/main.sh +source $VESTA/func/domain.sh + + +#----------------------------------------------------------# +# Verifications # +#----------------------------------------------------------# + +check_args '2' "$#" 'user domain' +validate_format 'user' 'domain' +is_system_enabled "$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' + + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +# Adding user +get_domain_values 'web' +/usr/sbin/userdel $FTP_USER + + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +# Update config +update_object_value 'web' 'DOMAIN' "$domain" '$FTP_USER' '' +update_object_value 'web' 'DOMAIN' "$domain" '$FTP_MD5' '' + +# Logging +log_history "deleted ftp account $FTP_USER for $domain" +log_event "$OK" "$EVENT" + +exit diff --git a/bin/v_list_web_domain b/bin/v_list_web_domain index 5d085d77c..bf6e0190b 100755 --- a/bin/v_list_web_domain +++ b/bin/v_list_web_domain @@ -76,7 +76,7 @@ conf=$USER_DATA/web.conf # Defining fileds to select fields='$DOMAIN $IP $IP6 $U_DISK $U_BANDWIDTH $TPL $ALIAS $CGI $ELOG $STATS - $STATS_USER $SSL $SSL_HOME $NGINX $NGINX_EXT $SUSPENDED $TIME $DATE' + $STATS_USER $SSL $SSL_HOME $FTP_USER $NGINX $NGINX_EXT $SUSPENDED $TIME $DATE' # Listing domains case $format in diff --git a/bin/v_list_web_domains b/bin/v_list_web_domains index cec973837..95442a347 100755 --- a/bin/v_list_web_domains +++ b/bin/v_list_web_domains @@ -35,8 +35,8 @@ conf=$USER_DATA/web.conf # Defining fileds to select fields="\$DOMAIN \$IP \$IP6 \$U_DISK \$U_BANDWIDTH \$TPL \$ALIAS \$CGI" -fields="$fields \$ELOG \$STATS \$STATS_USER \$SSL \$SSL_HOME \$NGINX" -fields="$fields \$NGINX_EXT \$SUSPENDED \$TIME \$DATE" +fields="$fields \$ELOG \$STATS \$STATS_USER \$SSL \$SSL_HOME \$FTP_USER" +fields="$fields \$NGINX \$NGINX_EXT \$SUSPENDED \$TIME \$DATE" # Listing domains case $format in diff --git a/bin/v_rebuild_web_domains b/bin/v_rebuild_web_domains index 855fd1a28..2c517d4a3 100755 --- a/bin/v_rebuild_web_domains +++ b/bin/v_rebuild_web_domains @@ -77,12 +77,11 @@ for domain in $(shell_list) ; do /var/log/httpd/domains/$domain.error.log chmod 551 $HOMEDIR/$user/web/$domain - chmod 751 $HOMEDIR/$user/web/$domain/private - chmod 751 $HOMEDIR/$user/web/$domain/cgi-bin - chmod 751 $HOMEDIR/$user/web/$domain/public_html - chmod 751 $HOMEDIR/$user/web/$domain/public_shtml - chmod 751 $HOMEDIR/$user/web/$domain/document_errors - chmod -f -R 775 $HOMEDIR/$user/web/$domain/document_errors/* + chmod 771 $HOMEDIR/$user/web/$domain/private + chmod 771 $HOMEDIR/$user/web/$domain/cgi-bin + chmod 771 $HOMEDIR/$user/web/$domain/public_html + chmod 771 $HOMEDIR/$user/web/$domain/public_shtml + chmod 771 $HOMEDIR/$user/web/$domain/document_errors chmod 551 $HOMEDIR/$user/web/$domain/stats chmod 551 $HOMEDIR/$user/web/$domain/logs chmod 640 /var/log/httpd/domains/$domain.* @@ -208,6 +207,31 @@ for domain in $(shell_list) ; do suspended_web=$((suspended_web + 1)) fi user_domains=$((user_domains + 1)) + + # Checking ftp + if [ ! -z "$FTP_USER" ]; then + if [ -z "$(grep ^$FTP_USER: /etc/passwd)" ]; then + /usr/sbin/adduser $FTP_USER -g $user -s /sbin/nologin -M \ + -d "$HOMEDIR/$user/web/$domain" > /dev/null 2>&1 + + shadow='/etc/shadow' + shdw=$(grep "^$FTP_USER:" $shadow) + shdw3=$(echo "$shdw" | cut -f3 -d :) + shdw4=$(echo "$shdw" | cut -f4 -d :) + shdw5=$(echo "$shdw" | cut -f5 -d :) + shdw6=$(echo "$shdw" | cut -f6 -d :) + shdw7=$(echo "$shdw" | cut -f7 -d :) + shdw8=$(echo "$shdw" | cut -f8 -d :) + shdw9=$(echo "$shdw" | cut -f9 -d :) + chmod u+w $shadow + sed -i "/^$FTP_USER:*/d" $shadow + shdw_str="$FTP_USER:$FTP_MD5:$shdw3:$shdw4:$shdw5:$shdw6" + shdw_str="$shdw_str:$shdw7:$shdw8:$shdw9" + echo "$shdw_str" >> $shadow + chmod u-w $shadow + fi + fi + done # Renaming tmp config diff --git a/func/main.sh b/func/main.sh index f68d33835..280267c41 100755 --- a/func/main.sh +++ b/func/main.sh @@ -726,6 +726,8 @@ validate_format(){ extentions) validate_format_common "$arg" 'extentions' ;; fname) validate_format_username "$arg" "$arg_name" ;; forward) validate_format_email "$arg" ;; + ftp_password) validate_format_password "$arg" ;; + ftp_user) validate_format_username "$arg" "$arg_name" ;; host) validate_format_domain "$arg" "$arg_name" ;; hour) validate_format_mhdmw "$arg" $arg_name ;; id) validate_format_int "$arg" ;; diff --git a/web/add/web/index.php b/web/add/web/index.php index 4f1a55b21..3fb774e7e 100644 --- a/web/add/web/index.php +++ b/web/add/web/index.php @@ -18,7 +18,20 @@ top_panel($user,$TAB); 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'])) || (!empty($_POST['v_elog'])) || (!empty($_POST['v_ssl'])) || (!empty($_POST['v_ssl_crt'])) || (!empty($_POST['v_ssl_key'])) || (!empty($_POST['v_ssl_ca'])) || ($_POST['v_stats'] != 'none') || (empty($_POST['v_nginx']))) $v_adv = 'yes'; + if ((!empty($_POST['v_stats_user'])) && (empty($_POST['v_stats_password']))) $errors[] = 'stats user password'; + if ((!empty($_POST['v_ftp_user'])) && (empty($_POST['v_ftp_password']))) $errors[] = 'ftp user password'; + + 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_nginx'])) $v_adv = 'yes'; + if (!empty($_POST['v_ftp'])) $v_adv = 'yes'; + + $v_nginx_ext = 'jpg, jpeg, gif, png, ico, svg, css, zip, tgz, gz, rar, bz2, exe, pdf, '; + $v_nginx_ext .= 'doc, xls, ppt, txt, odt, ods, odp, odf, tar, bmp, rtf, js, mp3, avi, '; + $v_nginx_ext .= 'mpeg, flv, html, htm'; + if ($_POST['v_nginx_ext'] != $v_nginx_ext) $v_adv = 'yes'; // Protect input $v_domain = preg_replace("/^www./i", "", $_POST['v_domain']); @@ -38,7 +51,24 @@ top_panel($user,$TAB); $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_nginx_ext = preg_replace("/\n/", " ", $_POST['v_nginx_ext']); + $v_nginx_ext = preg_replace("/,/", " ", $v_nginx_ext); + $v_nginx_ext = preg_replace('/\s+/', ' ',$v_nginx_ext); + $v_nginx_ext = trim($v_nginx_ext); + $v_nginx_ext = str_replace(' ', ", ", $v_nginx_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']; + + // 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.'; + } // Check for errors if (!empty($errors[0])) { @@ -50,7 +80,9 @@ top_panel($user,$TAB); } } $_SESSION['error_msg'] = "Error: field ".$error_msg." can not be blank."; - } else { + } + + if (empty($_SESSION['error_msg'])) { // Add WEB exec (VESTA_CMD."v_add_web_domain ".$user." ".$v_domain." ".$v_ip." ".$v_template." 'no'", $output, $return_var); if ($return_var != 0) { @@ -90,43 +122,49 @@ top_panel($user,$TAB); $valiases = trim($valiases); $aliases = explode(" ", $valiases); foreach ($aliases as $alias) { - $alias = escapeshellarg($alias); - if (empty($_SESSION['error_msg'])) { - exec (VESTA_CMD."v_add_web_domain_alias ".$user." ".$v_domain." ".$alias." 'no'", $output, $return_var); - if ($return_var != 0) { - $error = implode('', $output); - if (empty($error)) $error = 'Error: vesta did not return any output.'; - $_SESSION['error_msg'] = $error; - } - } - 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); - if ($return_var != 0) { - $error = implode('', $output); - if (empty($error)) $error = 'Error: vesta did not return any output.'; - $_SESSION['error_msg'] = $error; + 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); + if ($return_var != 0) { + $error = implode('', $output); + if (empty($error)) $error = 'Error: vesta did not return any output.'; + $_SESSION['error_msg'] = $error; + } } 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); + if ($return_var != 0) { + $error = implode('', $output); + if (empty($error)) $error = 'Error: vesta did not return any output.'; + $_SESSION['error_msg'] = $error; + } + unset($output); + } } } } - - // Add ErrorLog - if ((!empty($_POST['v_elog'])) && (empty($_SESSION['error_msg']))) { - exec (VESTA_CMD."v_add_web_domain_elog ".$user." ".$v_domain." 'no'", $output, $return_var); + 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); if ($return_var != 0) { $error = implode('', $output); if (empty($error)) $error = 'Error: vesta did not return any output.'; $_SESSION['error_msg'] = $error; } - unset($output); } + // Add Nginx if (($_POST['v_nginx'] == 'on') && (empty($_SESSION['error_msg']))) { - $nginx_ext = "'jpg,jpeg,gif,png,ico,css,zip,tgz,gz,rar,bz2,doc,xls,exe,pdf,ppt,txt,tar,wav,bmp,rtf,js,mp3,avi,mpeg,html,htm'"; - exec (VESTA_CMD."v_add_web_domain_nginx ".$user." ".$v_domain." 'default' ".$nginx_ext." 'no'", $output, $return_var); + $ext = str_replace(' ', '', $v_nginx_ext); + $ext = escapeshellarg($ext); + exec (VESTA_CMD."v_add_web_domain_nginx ".$user." ".$v_domain." 'default' ".$ext." 'no'", $output, $return_var); if ($return_var != 0) { $error = implode('', $output); if (empty($error)) $error = 'Error: vesta did not return any output.'; @@ -161,7 +199,8 @@ top_panel($user,$TAB); fclose($fp); } - exec (VESTA_CMD."v_add_web_domain_ssl ".$user." ".$v_domain." ".$tmpdir." 'same' 'no'", $output, $return_var); + $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); if ($return_var != 0) { $error = implode('', $output); if (empty($error)) $error = 'Error: vesta did not return any output.'; @@ -180,6 +219,52 @@ top_panel($user,$TAB); $_SESSION['error_msg'] = $error; } 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); + if ($return_var != 0) { + $error = implode('', $output); + if (empty($error)) $error = 'Error: vesta did not return any output.'; + $_SESSION['error_msg'] = $error; + } + 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); + if ($return_var != 0) { + $error = implode('', $output); + if (empty($error)) $error = 'Error: vesta did not return any output.'; + $_SESSION['error_msg'] = $error; + } else { + if (!empty($v_ftp_email)) { + $to = $_POST['v_ftp_email']; + $subject = "FTP login credentials"; + $hostname = exec('hostname'); + $from = "Vesta Control Panel "; + $mailtext .= "Your ftp account has been created successfully and is ready to use.\n\n"; + $mailtext .= "ip: ".$_POST['v_ip']."\n"; + $mailtext .= "domain: ".$_POST['v_domain']."\n"; + $mailtext .= "username: ".$user."_".$_POST['v_ftp_user']."\n"; + $mailtext .= "password: ".$_POST['v_ftp_password']."\n\n"; + $mailtext .= "--\nVesta Control Panel\n"; + send_email($to, $subject, $mailtext, $from); + unset($v_ftp_email); + } + } + unset($v_ftp); + unset($v_ftp_user); + unset($v_ftp_password); + unset($output); } if (($_POST['v_dns'] == 'on') && (empty($_SESSION['error_msg']))) { diff --git a/web/edit/user/index.php b/web/edit/user/index.php index 5c457d412..4742cb812 100644 --- a/web/edit/user/index.php +++ b/web/edit/user/index.php @@ -123,12 +123,17 @@ if ($_SESSION['user'] == 'admin') { // 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); - if ($return_var != 0) { - $error = implode('', $output); - if (empty($error)) $error = 'Error: vesta did not return any output.'; - $_SESSION['error_msg'] = $error; + // 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); + if ($return_var != 0) { + $error = implode('', $output); + if (empty($error)) $error = 'Error: vesta did not return any output.'; + $_SESSION['error_msg'] = $error; + } } unset($output); } diff --git a/web/edit/web/index.php b/web/edit/web/index.php index 18c9791df..2d069e8bc 100644 --- a/web/edit/web/index.php +++ b/web/edit/web/index.php @@ -61,6 +61,8 @@ top_panel($user,$TAB); $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'; @@ -197,30 +199,6 @@ top_panel($user,$TAB); } } - // Elog - if (($v_elog == 'yes') && (empty($_POST['v_elog'])) && (empty($_SESSION['error_msg']))) { - exec (VESTA_CMD."v_delete_web_domain_elog ".$v_username." ".$v_domain." 'no'", $output, $return_var); - if ($return_var != 0) { - $error = implode('', $output); - if (empty($error)) $error = 'Error: vesta did not return any output.'; - $_SESSION['error_msg'] = $error; - } - unset($output); - $restart_web = 'yes'; - $v_elog = 'no'; - } - if (($v_elog == 'no') && (!empty($_POST['v_elog'])) && (empty($_SESSION['error_msg'])) ) { - exec (VESTA_CMD."v_add_web_domain_elog ".$v_username." ".$v_domain." 'no'", $output, $return_var); - if ($return_var != 0) { - $error = implode('', $output); - if (empty($error)) $error = 'Error: vesta did not return any output.'; - $_SESSION['error_msg'] = $error; - } - unset($output); - $restart_web = 'yes'; - $v_elog = 'yes'; - } - // Nginx if ((!empty($v_nginx)) && (empty($_POST['v_nginx'])) && (empty($_SESSION['error_msg']))) { exec (VESTA_CMD."v_delete_web_domain_nginx ".$v_username." ".$v_domain." 'no'", $output, $return_var); @@ -487,6 +465,91 @@ top_panel($user,$TAB); } } + // 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); + if ($return_var != 0) { + $error = implode('', $output); + if (empty($error)) $error = 'Error: vesta did not return any output.'; + $_SESSION['error_msg'] = $error; + } + unset($output); + $v_ftp= ''; + $v_ftp_user = ''; + $v_ftp_password = ''; + } + 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 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'] = "Error: field ".$error_msg." can not be blank."; + } + 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); + if ($return_var != 0) { + $error = implode('', $output); + if (empty($error)) $error = 'Error: vesta did not return any output.'; + $_SESSION['error_msg'] = $error; + } + unset($output); + $v_ftp_user = $user."_".$_POST['v_ftp_user']; + $v_ftp_password = "••••••••"; + } + } + + 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 username'; + if (empty($_POST['v_ftp_password'])) $errors[] = 'ftp 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'] = "Error: field ".$error_msg." can not be blank."; + } + 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); + if ($return_var != 0) { + $error = implode('', $output); + if (empty($error)) $error = 'Error: vesta did not return any output.'; + $_SESSION['error_msg'] = $error; + } else { + if (!empty($_POST['v_ftp_email'])) { + $to = $_POST['v_ftp_email']; + $subject = "FTP login credentials"; + $hostname = exec('hostname'); + $from = "Vesta Control Panel "; + $mailtext .= "Your ftp account has been created successfully and is ready to use.\n\n"; + $mailtext .= "ip: ".$v_ip."\n"; + $mailtext .= "domain: ".$_GET['domain']."\n"; + $mailtext .= "username: ".$user."_".$_POST['v_ftp_user']."\n"; + $mailtext .= "password: ".$_POST['v_ftp_password']."\n\n"; + $mailtext .= "--\nVesta Control Panel\n"; + send_email($to, $subject, $mailtext, $from); + unset($v_ftp_email); + } + } + unset($output); + $v_ftp_user = $user."_".$_POST['v_ftp_user']; + $v_ftp_password = "••••••••"; + } + } // Restart web if (!empty($restart_web) && (empty($_SESSION['error_msg']))) { diff --git a/web/templates/admin/add_web.html b/web/templates/admin/add_web.html index 91d1447fd..a2af29fd9 100644 --- a/web/templates/admin/add_web.html +++ b/web/templates/admin/add_web.html @@ -27,7 +27,35 @@ - @@ -125,16 +137,6 @@ - - - Error Logging - - - - - > - - Nginx Support @@ -149,7 +151,7 @@ - + Nginx Supported Extentions @@ -175,7 +177,7 @@ - + SSL HomeDirectory @@ -224,35 +226,127 @@ - Web Statistics - - $value) { - $svalue = "'".$value."'"; - echo "\t\t\t\t".$value."\n"; - } - ?> - - Web Statistic Authorization - onclick="javascript:elementHideShow('statstable');"> - - Web Statistics Username - > - Web Statistics Password generate - id="v_password"> - - - - - - + + + Web Statistics + + + + + + $value) { + $svalue = "'".$value."'"; + echo "\t\t\t\t".$value."\n"; + } + ?> + + + + + + Web Statistic Authorization + + + + + onclick="javascript:elementHideShow('statstable');"> + + + + + + + + Web Statistics Username + + + + + > + + + + + Web Statistics Password generate + + + + + id="v_password"> + + + + + + + + Additional FTP Account + + + + + onclick="javascript:elementHideShow('ftptable');"> + + + + + + + + FTP Username + Prefix '.$user.'_ will be automaticaly added to username' ?> + + + + + > + + + + + FTP Password generate + + + + + > + + + + + + Send FTP credentials to email + + + + + > + + + + + + + + + + + + - - \ No newline at end of file + + + \ No newline at end of file diff --git a/web/templates/admin/list_web.html b/web/templates/admin/list_web.html index d26bd7704..7cad2658d 100644 --- a/web/templates/admin/list_web.html +++ b/web/templates/admin/list_web.html @@ -50,6 +50,18 @@ } else { $ssl_home = ''; } + $web_stats='no'; + if (!empty($data[$key]['STATS'])) { + $web_stats=$data[$key]['STATS']; + } + $ftp_user='no'; + if (!empty($data[$key]['FTP_USER'])) { + $ftp_user=$data[$key]['FTP_USER']; + } + $nginx_support='no'; + if (!empty($data[$key]['NGINX'])) { + $nginx_support='yes'; + } if (strlen($data[$key]['NGINX_EXT']) > 16 ) { $nginx_ext_title = str_replace(',', ', ', $data[$key]['NGINX_EXT']); $nginx_ext = substr($data[$key]['NGINX_EXT'], 0, 16); @@ -136,30 +148,10 @@ - + - CGI Support: - - - - Error Log: - - - - Web Statistics: - - - - Statistics Auth: - - - - - - - - SSL Support: + SSL Support: @@ -167,8 +159,8 @@ - Nginx Template: - + Nginx Support: + Nginx Extentions: @@ -176,6 +168,18 @@ + + + + Web Statistics: + + + + Additional FTP: + + + + diff --git a/web/templates/user/add_web.html b/web/templates/user/add_web.html index 73a54b2c8..d2e002859 100644 --- a/web/templates/user/add_web.html +++ b/web/templates/user/add_web.html @@ -27,6 +27,48 @@ + +