Explorar o código

web domain editing

Serghey Rodin %!s(int64=13) %!d(string=hai) anos
pai
achega
89197647fa

+ 2 - 2
bin/v_add_web_domain_nginx

@@ -15,8 +15,8 @@ user=$1
 domain=$(idn -t --quiet -u "$2" )
 domain=$(idn -t --quiet -u "$2" )
 domain_idn=$(idn -t --quiet -a "$domain")
 domain_idn=$(idn -t --quiet -a "$domain")
 template=${3-default}
 template=${3-default}
-default_extentions="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"
+default_extentions="jpg,jpeg,gif,png,ico,svg,css,zip,tgz,gz,rar,bz2,doc,xls,\
+exe,pdf,ppt,txt,odt,ods,odp,odf,tar,wav,bmp,rtf,js,mp3,avi,mpeg,flv,html,htm"
 extentions=${4-$default_extentions}
 extentions=${4-$default_extentions}
 restart="$5"
 restart="$5"
 
 

+ 0 - 1
bin/v_add_web_domain_stats_user

@@ -37,7 +37,6 @@ is_object_valid 'user' 'USER' "$user"
 is_object_unsuspended 'user' 'USER' "$user"
 is_object_unsuspended 'user' 'USER' "$user"
 is_object_valid 'web' 'DOMAIN' "$domain"
 is_object_valid 'web' 'DOMAIN' "$domain"
 is_object_unsuspended 'web' 'DOMAIN' "$domain"
 is_object_unsuspended 'web' 'DOMAIN' "$domain"
-is_object_value_exist 'web' 'DOMAIN' "$domain" '$STATS'
 
 
 
 
 #----------------------------------------------------------#
 #----------------------------------------------------------#

+ 4 - 1
bin/v_change_dns_domain_ip

@@ -14,6 +14,7 @@ user=$1
 domain=$(idn -t --quiet -u "$2" )
 domain=$(idn -t --quiet -u "$2" )
 domain_idn=$(idn -t --quiet -a "$domain")
 domain_idn=$(idn -t --quiet -a "$domain")
 ip=$3
 ip=$3
+restart=$4
 
 
 # Includes
 # Includes
 source $VESTA/conf/vesta.conf
 source $VESTA/conf/vesta.conf
@@ -53,7 +54,9 @@ update_domain_zone
 #----------------------------------------------------------#
 #----------------------------------------------------------#
 
 
 # Restart named
 # Restart named
-$BIN/v_restart_dns "$EVENT"
+if [ "$restart" != 'no' ]; then
+    $BIN/v_restart_dns "$EVENT"
+fi
 
 
 # Logging
 # Logging
 log_history "$EVENT"
 log_history "$EVENT"

+ 6 - 3
bin/v_change_web_domain_ip

@@ -1,6 +1,6 @@
 #!/bin/bash
 #!/bin/bash
 # info: change web domain ip address
 # info: change web domain ip address
-# options: user domain ip
+# options: user domain ip [restart]
 #
 #
 # The call is used for changing the site ip address. The ip change will be
 # The call is used for changing the site ip address. The ip change will be
 # performed for a virtual apache host and for a configuration nginx file both.
 # performed for a virtual apache host and for a configuration nginx file both.
@@ -15,6 +15,7 @@ user=$1
 domain=$(idn -t --quiet -u "$2" )
 domain=$(idn -t --quiet -u "$2" )
 domain_idn=$(idn -t --quiet -a "$domain")
 domain_idn=$(idn -t --quiet -a "$domain")
 ip=$3
 ip=$3
+restart=$4
 
 
 # Includes
 # Includes
 source $VESTA/conf/vesta.conf
 source $VESTA/conf/vesta.conf
@@ -27,7 +28,7 @@ source $VESTA/func/ip.sh
 #                    Verifications                         #
 #                    Verifications                         #
 #----------------------------------------------------------#
 #----------------------------------------------------------#
 
 
-check_args '3' "$#" 'user domain ip'
+check_args '3' "$#" 'user domain ip [restart]'
 validate_format 'user' 'domain' 'ip'
 validate_format 'user' 'domain' 'ip'
 is_system_enabled "$WEB_SYSTEM"
 is_system_enabled "$WEB_SYSTEM"
 is_object_valid 'user' 'USER' "$user"
 is_object_valid 'user' 'USER' "$user"
@@ -84,7 +85,9 @@ decrease_ip_value "$old"
 update_object_value 'web' 'DOMAIN' "$domain" '$IP' "$ip"
 update_object_value 'web' 'DOMAIN' "$domain" '$IP' "$ip"
 
 
 # Restart web server
 # Restart web server
-$BIN/v_restart_web "$EVENT"
+if [ "$restart" != 'no' ]; then
+    $BIN/v_restart_web "$EVENT"
+fi
 
 
 # Logging
 # Logging
 log_history "$EVENT"
 log_history "$EVENT"

+ 102 - 0
bin/v_change_web_domain_nginx_tpl

@@ -0,0 +1,102 @@
+#!/bin/bash
+# info: change web domain nginx template
+# options: user domain template [extentions] [restart]
+#
+# The function changes template of nginx.conf configuration file. The content
+# of webdomain directories remains untouched.
+
+
+#----------------------------------------------------------#
+#                    Variable&Function                     #
+#----------------------------------------------------------#
+
+# Argument defenition
+user=$1
+domain=$(idn -t --quiet -u "$2" )
+domain_idn=$(idn -t --quiet -a "$domain")
+template=$3
+default_extentions="jpg,jpeg,gif,png,ico,svg,css,zip,tgz,gz,rar,bz2,doc,xls,\
+exe,pdf,ppt,txt,odt,ods,odp,odf,tar,wav,bmp,rtf,js,mp3,avi,mpeg,flv,html,htm"
+extentions=${4-$default_extentions}
+restart="$5"
+
+
+# Includes
+source $VESTA/conf/vesta.conf
+source $VESTA/func/main.sh
+source $VESTA/func/domain.sh
+
+
+#----------------------------------------------------------#
+#                    Verifications                         #
+#----------------------------------------------------------#
+
+check_args '3' "$#" 'user domain template [extentions] [restart]'
+validate_format 'user' 'domain' 'template'
+is_system_enabled "$PROXY_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" '$NGINX'
+is_nginx_template_valid
+
+
+#----------------------------------------------------------#
+#                       Action                             #
+#----------------------------------------------------------#
+
+# Parsing domain values
+get_domain_values 'web'
+tpl_file="$WEBTPL/ngingx_vhost_$NGINX.tpl"
+conf="$HOMEDIR/$user/conf/web/nginx.conf"
+
+# Delete old vhost
+del_web_config
+
+# Checking ssl
+if [ "$SSL" = 'yes' ]; then
+    tpl_file="$WEBTPL/ngingx_vhost_$NGINX.stpl"
+    conf="$HOMEDIR/$user/conf/web/snginx.conf"
+    del_web_config
+fi
+
+# Add new vhost
+NGINX="$template"
+NGINX_EXT="$extentions"
+tpl_file="$WEBTPL/ngingx_vhost_$NGINX.tpl"
+conf="$HOMEDIR/$user/conf/web/nginx.conf"
+upd_web_domain_values
+add_web_config
+chown root:nginx $conf
+chmod 640 $conf
+
+# Checking ssl
+if [ "$SSL" = 'yes' ]; then
+    proxy_string="proxy_pass     https://$ip:$WEB_SSL_PORT;"
+    tpl_file="$WEBTPL/ngingx_vhost_$NGINX.stpl"
+    conf="$HOMEDIR/$user/conf/web/snginx.conf"
+    add_web_config
+    chown root:nginx $conf
+    chmod 640 $conf
+fi
+
+
+#----------------------------------------------------------#
+#                       Vesta                              #
+#----------------------------------------------------------#
+
+# Update config
+update_object_value 'web' 'DOMAIN' "$domain" '$NGINX' "$NGINX"
+update_object_value 'web' 'DOMAIN' "$domain" '$NGINX_EXT' "$extentions"
+
+# Restart web
+if [ "$restart" != 'no' ]; then
+    $BIN/v_restart_web "$EVENT"
+fi
+
+# Logging
+log_history "$EVENT"
+log_event "$OK" "$EVENT"
+
+exit

+ 91 - 0
bin/v_change_web_domain_stats

@@ -0,0 +1,91 @@
+#!/bin/bash
+# info: change web domain statistics
+# options: user domain type
+#
+# The function of deleting site's system of statistics. Its type is
+# automatically chooses from client's configuration file.
+
+
+#----------------------------------------------------------#
+#                    Variable&Function                     #
+#----------------------------------------------------------#
+
+# Argument defenition
+user=$1
+domain=$(idn -t --quiet -u "$2" )
+type=$3
+
+# Includes
+source $VESTA/conf/vesta.conf
+source $VESTA/func/main.sh
+source $VESTA/func/domain.sh
+
+
+#----------------------------------------------------------#
+#                    Verifications                         #
+#----------------------------------------------------------#
+
+check_args '3' "$#" 'user domain type'
+validate_format 'user' 'domain'
+is_system_enabled "$WEB_SYSTEM"
+is_type_valid "$STATS_SYSTEM" "$type"
+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" '$STATS'
+
+
+#----------------------------------------------------------#
+#                       Action                             #
+#----------------------------------------------------------#
+
+# Defining statistic type
+get_domain_values 'web'
+
+# Comparing stats types
+if [ "$STATS" == $type ]; then
+    log_event "$OK" "$EVENT"
+    exit 0
+fi
+
+# Defining statistic dir
+stats_dir="$HOMEDIR/$user/web/$domain/stats"
+
+# Deleting dir content
+rm -rf $stats_dir/*
+
+# Deleting config
+rm -f $HOMEDIR/$user/conf/web/$STATS.$domain.conf
+
+# Preparing domain values for the template substitution
+upd_web_domain_values
+
+# Adding statistic config
+cat $WEBTPL/$type.tpl |\
+    sed -e "s/%ip%/$ip/g" \
+        -e "s/%web_port%/$WEB_PORT/g" \
+        -e "s/%web_ssl_port%/$WEB_SSL_PORT/g" \
+        -e "s/%proxy_port%/$PROXY_PORT/g" \
+        -e "s/%proxy_ssl_port%/$PROXY_SSL_PORT/g" \
+        -e "s/%domain_idn%/$domain_idn/g" \
+        -e "s/%domain%/$domain/g" \
+        -e "s/%user%/$user/g" \
+        -e "s/%home%/${HOMEDIR////\/}/g" \
+        -e "s/%alias%/${aliases//,/ }/g" \
+        -e "s/%alias_idn%/${aliases_idn//,/ }/g" \
+    > $HOMEDIR/$user/conf/web/$type.$domain.conf
+
+
+#----------------------------------------------------------#
+#                       Vesta                              #
+#----------------------------------------------------------#
+
+# Update config
+update_object_value 'web' 'DOMAIN' "$domain" '$STATS' "$type"
+
+# Logging
+log_history "$EVENT"
+log_event "$OK" "$EVENT"
+
+exit

+ 6 - 3
bin/v_change_web_domain_tpl

@@ -1,6 +1,6 @@
 #!/bin/bash
 #!/bin/bash
 # info: change web domain template
 # info: change web domain template
-# options: user domain template
+# options: user domain template [restart]
 #
 #
 # The function changes template of httpd.conf configuration file. The content
 # The function changes template of httpd.conf configuration file. The content
 # of webdomain directories remains untouched.
 # of webdomain directories remains untouched.
@@ -15,6 +15,7 @@ user=$1
 domain=$(idn -t --quiet -u "$2" )
 domain=$(idn -t --quiet -u "$2" )
 domain_idn=$(idn -t --quiet -a "$domain")
 domain_idn=$(idn -t --quiet -a "$domain")
 template=$3
 template=$3
+restart=$4
 
 
 # Includes
 # Includes
 source $VESTA/conf/vesta.conf
 source $VESTA/conf/vesta.conf
@@ -26,7 +27,7 @@ source $VESTA/func/domain.sh
 #                    Verifications                         #
 #                    Verifications                         #
 #----------------------------------------------------------#
 #----------------------------------------------------------#
 
 
-check_args '3' "$#" 'user domain template'
+check_args '3' "$#" 'user domain template [restart]'
 validate_format 'user' 'domain' 'template'
 validate_format 'user' 'domain' 'template'
 is_system_enabled "$WEB_SYSTEM"
 is_system_enabled "$WEB_SYSTEM"
 is_object_valid 'user' 'USER' "$user"
 is_object_valid 'user' 'USER' "$user"
@@ -170,7 +171,9 @@ for keys in $(cat $WEBTPL/apache_$template.descr|grep -v '#'); do
 done
 done
 
 
 # Restart web
 # Restart web
-$BIN/v_restart_web "$EVENT"
+if [ "$restart" != 'no' ]; then
+    $BIN/v_restart_web "$EVENT"
+fi
 
 
 # Logging
 # Logging
 log_history "$EVENT"
 log_history "$EVENT"

+ 6 - 3
bin/v_delete_web_domain_alias

@@ -1,6 +1,6 @@
 #!/bin/bash
 #!/bin/bash
 # info: delete web domain alias
 # info: delete web domain alias
-# options: user domain alias
+# options: user domain alias [restart]
 #
 #
 # The function of deleting the alias domain (parked domain). By this call
 # The function of deleting the alias domain (parked domain). By this call
 # default www aliase can be removed as well.
 # default www aliase can be removed as well.
@@ -16,6 +16,7 @@ domain=$(idn -t --quiet -u "$2" )
 domain_idn=$(idn -t --quiet -a "$domain" )
 domain_idn=$(idn -t --quiet -a "$domain" )
 dom_alias=$(idn -t --quiet -u "$3" )
 dom_alias=$(idn -t --quiet -u "$3" )
 dom_alias_idn=$(idn -t --quiet -a "$dom_alias" )
 dom_alias_idn=$(idn -t --quiet -a "$dom_alias" )
+restart="$4"
 
 
 # Includes
 # Includes
 source $VESTA/conf/vesta.conf
 source $VESTA/conf/vesta.conf
@@ -27,7 +28,7 @@ source $VESTA/func/domain.sh
 #                    Verifications                         #
 #                    Verifications                         #
 #----------------------------------------------------------#
 #----------------------------------------------------------#
 
 
-check_args '3' "$#" 'user domain dom_alias'
+check_args '3' "$#" 'user domain dom_alias [restart]'
 validate_format 'user' 'domain' 'dom_alias'
 validate_format 'user' 'domain' 'dom_alias'
 is_system_enabled 'WEB_SYSTEM'
 is_system_enabled 'WEB_SYSTEM'
 is_object_valid 'user' 'USER' "$user"
 is_object_valid 'user' 'USER' "$user"
@@ -97,7 +98,9 @@ update_object_value 'web' 'DOMAIN' "$domain" '$ALIAS' "$ALIAS"
 decrease_user_value "$user" '$U_WEB_ALIASES'
 decrease_user_value "$user" '$U_WEB_ALIASES'
 
 
 # Restart web server
 # Restart web server
-$BIN/v_restart_web "$EVENT"
+if [ "$restart" != 'no' ]; then
+    $BIN/v_restart_web "$EVENT"
+fi
 
 
 # Logging
 # Logging
 log_history "$EVENT"
 log_history "$EVENT"

+ 6 - 3
bin/v_delete_web_domain_elog

@@ -1,6 +1,6 @@
 #!/bin/bash
 #!/bin/bash
 # info: delete web domain error loggin support
 # info: delete web domain error loggin support
-# options: user domain
+# options: user domain [restart]
 #
 #
 # The function of disabling error logging feature. It comments  ErrorLog 
 # The function of disabling error logging feature. It comments  ErrorLog 
 # direcitve in apache or/and nginx configuration. The data already collected
 # direcitve in apache or/and nginx configuration. The data already collected
@@ -15,6 +15,7 @@
 user=$1
 user=$1
 domain=$(idn -t --quiet -u "$2" )
 domain=$(idn -t --quiet -u "$2" )
 domain_idn=$(idn -t --quiet -a "$domain")
 domain_idn=$(idn -t --quiet -a "$domain")
+restart=$3
 
 
 # Includes
 # Includes
 source $VESTA/conf/vesta.conf
 source $VESTA/conf/vesta.conf
@@ -26,7 +27,7 @@ source $VESTA/func/domain.sh
 #                    Verifications                         #
 #                    Verifications                         #
 #----------------------------------------------------------#
 #----------------------------------------------------------#
 
 
-check_args '2' "$#" 'user domain'
+check_args '2' "$#" 'user domain [restart]'
 validate_format 'user' 'domain'
 validate_format 'user' 'domain'
 is_system_enabled "$WEB_SYSTEM"
 is_system_enabled "$WEB_SYSTEM"
 is_object_valid 'user' 'USER' "$user" "$user"
 is_object_valid 'user' 'USER' "$user" "$user"
@@ -86,7 +87,9 @@ fi
 update_object_value 'web' 'DOMAIN' "$domain" '$ELOG' 'no'
 update_object_value 'web' 'DOMAIN' "$domain" '$ELOG' 'no'
 
 
 # Restart web server
 # Restart web server
-$BIN/v_restart_web "$EVENT"
+if [ "$restart" != 'no' ]; then
+    $BIN/v_restart_web "$EVENT"
+fi
 
 
 # Logging
 # Logging
 log_history "$EVENT"
 log_history "$EVENT"

+ 4 - 1
bin/v_delete_web_domain_nginx

@@ -13,6 +13,7 @@
 user=$1
 user=$1
 domain=$(idn -t --quiet -u "$2" )
 domain=$(idn -t --quiet -u "$2" )
 domain_idn=$(idn -t --quiet -a "$domain")
 domain_idn=$(idn -t --quiet -a "$domain")
+restart=$3
 
 
 # Includes
 # Includes
 source $VESTA/conf/vesta.conf
 source $VESTA/conf/vesta.conf
@@ -75,7 +76,9 @@ if [ -z "$last_nginx" ]; then
 fi
 fi
 
 
 # Restart web server
 # Restart web server
-$BIN/v_restart_web "$EVENT"
+if [ "$restart" != 'no' ]; then
+    $BIN/v_restart_web "$EVENT"
+fi
 
 
 # Logging
 # Logging
 log_history "$EVENT"
 log_history "$EVENT"

+ 4 - 1
bin/v_delete_web_domain_ssl

@@ -13,6 +13,7 @@
 user=$1
 user=$1
 domain=$(idn -t --quiet -u "$2" )
 domain=$(idn -t --quiet -u "$2" )
 domain_idn=$(idn -t --quiet -a "$domain")
 domain_idn=$(idn -t --quiet -a "$domain")
+restart=$3
 
 
 # Includes
 # Includes
 source $VESTA/conf/vesta.conf
 source $VESTA/conf/vesta.conf
@@ -89,7 +90,9 @@ fi
 decrease_user_value "$user" '$U_WEB_SSL'
 decrease_user_value "$user" '$U_WEB_SSL'
 
 
 # Restart web server
 # Restart web server
-$BIN/v_restart_web "$EVENT"
+if [ "$restart" != 'no' ]; then
+    $BIN/v_restart_web "$EVENT"
+fi
 
 
 # Logging
 # Logging
 log_history "$EVENT"
 log_history "$EVENT"

+ 1 - 1
bin/v_list_web_domain

@@ -76,7 +76,7 @@ conf=$USER_DATA/web.conf
 
 
 # Defining fileds to select
 # Defining fileds to select
 fields='$DOMAIN $IP $IP6 $U_DISK $U_BANDWIDTH $TPL $ALIAS $PHP $CGI $ELOG
 fields='$DOMAIN $IP $IP6 $U_DISK $U_BANDWIDTH $TPL $ALIAS $PHP $CGI $ELOG
- $STATS $STATS_AUTH $SSL $SSL_HOME $NGINX $NGINX_EXT $SUSPENDED $DATE'
+ $STATS $STATS_USER $SSL $SSL_HOME $NGINX $NGINX_EXT $SUSPENDED $TIME $DATE'
 
 
 # Listing domains
 # Listing domains
 case $format in 
 case $format in 

+ 1 - 1
bin/v_list_web_domains

@@ -35,7 +35,7 @@ conf=$USER_DATA/web.conf
 
 
 # Defining fileds to select
 # Defining fileds to select
 fields="\$DOMAIN \$IP \$IP6 \$U_DISK \$U_BANDWIDTH \$TPL \$ALIAS \$PHP \$CGI"
 fields="\$DOMAIN \$IP \$IP6 \$U_DISK \$U_BANDWIDTH \$TPL \$ALIAS \$PHP \$CGI"
-fields="$fields \$ELOG \$STATS \$STATS_AUTH \$SSL \$SSL_HOME \$NGINX"
+fields="$fields \$ELOG \$STATS \$STATS_USER \$SSL \$SSL_HOME \$NGINX"
 fields="$fields \$NGINX_EXT \$SUSPENDED \$TIME \$DATE"
 fields="$fields \$NGINX_EXT \$SUSPENDED \$TIME \$DATE"
 
 
 # Listing domains
 # Listing domains

+ 1 - 1
data/packages/default.pkg

@@ -1,6 +1,6 @@
 WEB_DOMAINS='100'
 WEB_DOMAINS='100'
 WEB_ALIASES='100'
 WEB_ALIASES='100'
-WEB_TPL='default,phpfcgi,unlim'
+WEB_TPL='default,phpfcgid,unlim'
 DNS_DOMAINS='100'
 DNS_DOMAINS='100'
 DNS_RECORDS='100'
 DNS_RECORDS='100'
 MAIL_DOMAINS='100'
 MAIL_DOMAINS='100'

+ 0 - 5
data/templates/web/apache_unlim.stpl

@@ -16,11 +16,6 @@
         SSLRequireSSL
         SSLRequireSSL
         Options +Includes -Indexes %cgi_option%
         Options +Includes -Indexes %cgi_option%
         php_admin_value upload_tmp_dir %home%/%user%/tmp
         php_admin_value upload_tmp_dir %home%/%user%/tmp
-        php_admin_value upload_max_filesize 60M
-        php_admin_value max_execution_time 60
-        php_admin_value post_max_size  60M
-        php_admin_value memory_limit 60M
-        php_admin_flag mysql.allow_persistent  off
         php_admin_flag safe_mode off
         php_admin_flag safe_mode off
         php_admin_value session.save_path %home%/%user%/tmp
         php_admin_value session.save_path %home%/%user%/tmp
         php_admin_value sendmail_path '/usr/sbin/sendmail -t -i -f %email%'
         php_admin_value sendmail_path '/usr/sbin/sendmail -t -i -f %email%'

+ 0 - 5
data/templates/web/apache_unlim.tpl

@@ -15,11 +15,6 @@
         AllowOverride All
         AllowOverride All
         Options +Includes -Indexes %cgi_option%
         Options +Includes -Indexes %cgi_option%
         php_admin_value upload_tmp_dir %home%/%user%/tmp
         php_admin_value upload_tmp_dir %home%/%user%/tmp
-        php_admin_value upload_max_filesize 60M
-        php_admin_value max_execution_time 60
-        php_admin_value post_max_size  60M
-        php_admin_value memory_limit 60M
-        php_admin_flag mysql.allow_persistent  off
         php_admin_flag safe_mode off
         php_admin_flag safe_mode off
         php_admin_value session.save_path %home%/%user%/tmp
         php_admin_value session.save_path %home%/%user%/tmp
         php_admin_value sendmail_path '/usr/sbin/sendmail -t -i -f %email%'
         php_admin_value sendmail_path '/usr/sbin/sendmail -t -i -f %email%'

+ 1 - 1
func/domain.sh

@@ -17,7 +17,7 @@ is_nginx_template_valid() {
     d="$WEBTPL/ngingx_vhost_$template.descr"
     d="$WEBTPL/ngingx_vhost_$template.descr"
     s="$WEBTPL/ngingx_vhost_$template.stpl"
     s="$WEBTPL/ngingx_vhost_$template.stpl"
     if [ ! -e $t ] || [ ! -e $d ] || [ ! -e $s ]; then
     if [ ! -e $t ] || [ ! -e $d ] || [ ! -e $s ]; then
-        echo "Error: $template not found"
+        echo "Error: nginx $template not found"
         log_event "$E_NOTEXIST" "$EVENT"
         log_event "$E_NOTEXIST" "$EVENT"
         exit $E_NOTEXIST
         exit $E_NOTEXIST
     fi
     fi

+ 17 - 16
web/add/web/index.php

@@ -1,6 +1,6 @@
 <?php
 <?php
 // Init
 // Init
-//error_reporting(NULL);
+error_reporting(NULL);
 ob_start();
 ob_start();
 session_start();
 session_start();
 $TAB = 'WEB';
 $TAB = 'WEB';
@@ -20,15 +20,15 @@ if ($_SESSION['user'] == 'admin') {
         header("Location: /list/web/");
         header("Location: /list/web/");
     }
     }
 
 
-    // OK
+    // Action
     if (!empty($_POST['ok'])) {
     if (!empty($_POST['ok'])) {
         // Check input
         // Check input
         if (empty($_POST['v_domain'])) $errors[] = 'domain';
         if (empty($_POST['v_domain'])) $errors[] = 'domain';
         if (empty($_POST['v_ip'])) $errors[] = 'ip';
         if (empty($_POST['v_ip'])) $errors[] = 'ip';
         if (empty($_POST['v_template'])) $errors[] = 'template';
         if (empty($_POST['v_template'])) $errors[] = 'template';
-        if ((!empty($_POST['v_ssl'])) && (empty($_POST['v_ssl_cert']))) $errors[] = 'ssl certificate';
+        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_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_cert'])) || (!empty($_POST['v_ssl_key'])) || (!empty($_POST['v_ssl_pem'])) || ($_POST['v_stats'] != 'none')) $v_adv = 'yes';
+        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')) $v_adv = 'yes';
 
 
         // Protect input
         // Protect input
         $v_domain = preg_replace("/^www./i", "", $_POST['v_domain']);
         $v_domain = preg_replace("/^www./i", "", $_POST['v_domain']);
@@ -41,9 +41,9 @@ if ($_SESSION['user'] == 'admin') {
         $v_elog = $_POST['v_elog'];
         $v_elog = $_POST['v_elog'];
         $v_nginx = $_POST['v_nginx'];
         $v_nginx = $_POST['v_nginx'];
         $v_ssl = $_POST['v_ssl'];
         $v_ssl = $_POST['v_ssl'];
-        $v_ssl_cert = $_POST['v_ssl_cert'];
+        $v_ssl_crt = $_POST['v_ssl_crt'];
         $v_ssl_key = $_POST['v_ssl_key'];
         $v_ssl_key = $_POST['v_ssl_key'];
-        $v_ssl_pem = $_POST['v_ssl_pem'];
+        $v_ssl_ca = $_POST['v_ssl_ca'];
         $v_stats = escapeshellarg($_POST['v_stats']);
         $v_stats = escapeshellarg($_POST['v_stats']);
 
 
         // Check for errors
         // Check for errors
@@ -57,6 +57,7 @@ if ($_SESSION['user'] == 'admin') {
             }
             }
             $_SESSION['error_msg'] = "Error: field ".$error_msg." can not be blank.";
             $_SESSION['error_msg'] = "Error: field ".$error_msg." can not be blank.";
         } else {
         } else {
+            // Add WEB
             exec (VESTA_CMD."v_add_web_domain ".$user." ".$v_domain." ".$v_ip." ".$v_template." 'no'", $output, $return_var);
             exec (VESTA_CMD."v_add_web_domain ".$user." ".$v_domain." ".$v_ip." ".$v_template." 'no'", $output, $return_var);
             if ($return_var != 0) {
             if ($return_var != 0) {
                 $error = implode('<br>', $output);
                 $error = implode('<br>', $output);
@@ -92,7 +93,7 @@ if ($_SESSION['user'] == 'admin') {
                 $valiases = preg_replace("/\n/", " ", $_POST['v_aliases']);
                 $valiases = preg_replace("/\n/", " ", $_POST['v_aliases']);
                 $valiases = preg_replace("/,/", " ", $valiases);
                 $valiases = preg_replace("/,/", " ", $valiases);
                 $valiases = preg_replace('/\s+/', ' ',$valiases);
                 $valiases = preg_replace('/\s+/', ' ',$valiases);
-
+                $valiases = trim($valiases);
                 $aliases = explode(" ", $valiases);
                 $aliases = explode(" ", $valiases);
                 foreach ($aliases as $alias) {
                 foreach ($aliases as $alias) {
                     $alias = escapeshellarg($alias);
                     $alias = escapeshellarg($alias);
@@ -146,23 +147,23 @@ if ($_SESSION['user'] == 'admin') {
                 $tmpdir = $output[0];
                 $tmpdir = $output[0];
 
 
                 // Certificate
                 // Certificate
-                if (!empty($_POST['v_ssl_cert'])) {
+                if (!empty($_POST['v_ssl_crt'])) {
                     $fp = fopen($tmpdir."/".$_POST['v_domain'].".crt", 'w');
                     $fp = fopen($tmpdir."/".$_POST['v_domain'].".crt", 'w');
-                    fwrite($fp, $_POST['v_ssl_cert']."\n");
+                    fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_crt']));
                     fclose($fp);
                     fclose($fp);
                 }
                 }
 
 
                 // Key
                 // Key
                 if (!empty($_POST['v_ssl_key'])) {
                 if (!empty($_POST['v_ssl_key'])) {
                     $fp = fopen($tmpdir."/".$_POST['v_domain'].".key", 'w');
                     $fp = fopen($tmpdir."/".$_POST['v_domain'].".key", 'w');
-                    fwrite($fp, $_POST['v_ssl_key']."\n");
+                    fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_key']));
                     fclose($fp);
                     fclose($fp);
                 }
                 }
 
 
-                // Pem
-                if (!empty($_POST['v_ssl_pem'])) {
-                    $fp = fopen($tmpdir."/".$_POST['v_domain'].".pem", 'w');
-                    fwrite($fp, $_POST['v_ssl_pem']."\n");
+                // 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']));
                     fclose($fp);
                     fclose($fp);
                 }
                 }
 
 
@@ -199,9 +200,9 @@ if ($_SESSION['user'] == 'admin') {
                 unset($v_domain);
                 unset($v_domain);
                 unset($v_aliases);
                 unset($v_aliases);
                 unset($v_ssl);
                 unset($v_ssl);
-                unset($v_ssl_cert);
+                unset($v_ssl_crt);
                 unset($v_ssl_key);
                 unset($v_ssl_key);
-                unset($v_ssl_pem);
+                unset($v_ssl_ca);
             }
             }
         }
         }
     }
     }

+ 9 - 6
web/edit/user/index.php

@@ -1,6 +1,6 @@
 <?php
 <?php
 // Init
 // Init
-//error_reporting(NULL);
+error_reporting(NULL);
 ob_start();
 ob_start();
 session_start();
 session_start();
 
 
@@ -34,6 +34,7 @@ if ($_SESSION['user'] == 'admin') {
         $_SESSION['error_msg'] = $error;
         $_SESSION['error_msg'] = $error;
     } else {
     } else {
         $data = json_decode(implode('', $output), true);
         $data = json_decode(implode('', $output), true);
+        unset($output);
         $v_username = $_GET['user'];
         $v_username = $_GET['user'];
         $v_password = "••••••••";
         $v_password = "••••••••";
         $v_email = $data[$v_username]['CONTACT'];
         $v_email = $data[$v_username]['CONTACT'];
@@ -56,8 +57,6 @@ if ($_SESSION['user'] == 'admin') {
         $v_time = $data[$v_username]['TIME'];
         $v_time = $data[$v_username]['TIME'];
         $v_date = $data[$v_username]['DATE'];
         $v_date = $data[$v_username]['DATE'];
 
 
-        unset($output);
-
         exec (VESTA_CMD."v_list_user_packages json", $output, $return_var);
         exec (VESTA_CMD."v_list_user_packages json", $output, $return_var);
         $packages = json_decode(implode('', $output), true);
         $packages = json_decode(implode('', $output), true);
         unset($output);
         unset($output);
@@ -67,9 +66,11 @@ if ($_SESSION['user'] == 'admin') {
         unset($output);
         unset($output);
     }
     }
 
 
+    // Action
     if (!empty($_POST['save'])) {
     if (!empty($_POST['save'])) {
         $v_username = escapeshellarg($_POST['v_username']);
         $v_username = escapeshellarg($_POST['v_username']);
 
 
+        // Change password
         if (($v_password != $_POST['v_password']) && (empty($_SESSION['error_msg']))) {
         if (($v_password != $_POST['v_password']) && (empty($_SESSION['error_msg']))) {
             $v_password = escapeshellarg($_POST['v_password']);
             $v_password = escapeshellarg($_POST['v_password']);
             exec (VESTA_CMD."v_change_user_password ".$v_username." ".$v_password, $output, $return_var);
             exec (VESTA_CMD."v_change_user_password ".$v_username." ".$v_password, $output, $return_var);
@@ -82,6 +83,7 @@ if ($_SESSION['user'] == 'admin') {
             unset($output);
             unset($output);
         }
         }
 
 
+        // Change package
         if (($v_package != $_POST['v_package']) && (empty($_SESSION['error_msg']))) {
         if (($v_package != $_POST['v_package']) && (empty($_SESSION['error_msg']))) {
             $v_package = escapeshellarg($_POST['v_package']);
             $v_package = escapeshellarg($_POST['v_package']);
             exec (VESTA_CMD."v_change_user_package ".$v_username." ".$v_package, $output, $return_var);
             exec (VESTA_CMD."v_change_user_package ".$v_username." ".$v_package, $output, $return_var);
@@ -93,6 +95,7 @@ if ($_SESSION['user'] == 'admin') {
             unset($output);
             unset($output);
         }
         }
 
 
+        // Change shell
         if (($v_shell != $_POST['v_shell']) && (empty($_SESSION['error_msg']))) {
         if (($v_shell != $_POST['v_shell']) && (empty($_SESSION['error_msg']))) {
             $v_shell = escapeshellarg($_POST['v_shell']);
             $v_shell = escapeshellarg($_POST['v_shell']);
             exec (VESTA_CMD."v_change_user_shell ".$v_username." ".$v_shell, $output, $return_var);
             exec (VESTA_CMD."v_change_user_shell ".$v_username." ".$v_shell, $output, $return_var);
@@ -104,6 +107,7 @@ if ($_SESSION['user'] == 'admin') {
             unset($output);
             unset($output);
         }
         }
 
 
+        // Change contact email
         if (($v_email != $_POST['v_email']) && (empty($_SESSION['error_msg']))) {
         if (($v_email != $_POST['v_email']) && (empty($_SESSION['error_msg']))) {
             $v_email = escapeshellarg($_POST['v_email']);
             $v_email = escapeshellarg($_POST['v_email']);
             exec (VESTA_CMD."v_change_user_contact ".$v_username." ".$v_email, $output, $return_var);
             exec (VESTA_CMD."v_change_user_contact ".$v_username." ".$v_email, $output, $return_var);
@@ -115,6 +119,7 @@ if ($_SESSION['user'] == 'admin') {
             unset($output);
             unset($output);
         }
         }
 
 
+        // Change Name
         if (($v_fname != $_POST['v_fname']) || ($v_lname != $_POST['v_lname']) && (empty($_SESSION['error_msg']))) {
         if (($v_fname != $_POST['v_fname']) || ($v_lname != $_POST['v_lname']) && (empty($_SESSION['error_msg']))) {
             $v_fname = escapeshellarg($_POST['v_fname']);
             $v_fname = escapeshellarg($_POST['v_fname']);
             $v_lname = escapeshellarg($_POST['v_lname']);
             $v_lname = escapeshellarg($_POST['v_lname']);
@@ -127,12 +132,12 @@ if ($_SESSION['user'] == 'admin') {
             unset($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']))) {
         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_ns1 = escapeshellarg($_POST['v_ns1']);
             $v_ns2 = escapeshellarg($_POST['v_ns2']);
             $v_ns2 = escapeshellarg($_POST['v_ns2']);
             $v_ns3 = escapeshellarg($_POST['v_ns3']);
             $v_ns3 = escapeshellarg($_POST['v_ns3']);
             $v_ns4 = escapeshellarg($_POST['v_ns4']);
             $v_ns4 = escapeshellarg($_POST['v_ns4']);
-
             $ns_cmd = VESTA_CMD."v_change_user_ns ".$v_username." ".$v_ns1." ".$v_ns2;
             $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_ns3'])) $ns_cmd = $ns_cmd." ".$v_ns3;
             if (!empty($_POST['v_ns4'])) $ns_cmd = $ns_cmd." ".$v_ns4;
             if (!empty($_POST['v_ns4'])) $ns_cmd = $ns_cmd." ".$v_ns4;
@@ -153,8 +158,6 @@ if ($_SESSION['user'] == 'admin') {
     include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_user.html');
     include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_user.html');
     unset($_SESSION['error_msg']);
     unset($_SESSION['error_msg']);
     unset($_SESSION['ok_msg']);
     unset($_SESSION['ok_msg']);
-
-
 }
 }
 
 
 // Footer
 // Footer

+ 522 - 0
web/edit/web/index.php

@@ -0,0 +1,522 @@
+<?php
+// Init
+//error_reporting(NULL);
+ob_start();
+session_start();
+
+$TAB = 'WEB';
+include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
+
+// Header
+include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
+
+// Panel
+top_panel($user,$TAB);
+
+// Are you admin?
+if ($_SESSION['user'] == 'admin') {
+
+    // Check user argument?
+    if (empty($_GET['domain'])) {
+        header("Location: /list/web/");
+    }
+
+    if (!empty($_POST['cancel'])) {
+        header("Location: /list/web/");
+    }
+
+    // Check domain
+    $v_domain = escapeshellarg($_GET['domain']);
+    exec (VESTA_CMD."v_list_web_domain ".$user." ".$v_domain." json", $output, $return_var);
+    if ($return_var != 0) {
+        $error = implode('<br>', $output);
+        if (empty($error)) $error = 'Error: vesta did not return any output.';
+        $_SESSION['error_msg'] = $error;
+    } else {
+        $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_nginx = $data[$v_domain]['NGINX'];
+        $v_nginx_ext = str_replace(',', ', ', $data[$v_domain]['NGINX_EXT']);
+        $v_stats = $data[$v_domain]['STATS'];
+        $v_stats_user = $data[$v_domain]['STATS_USER'];
+        if (!empty($v_stats_user)) $v_stats_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'];
+    
+        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 ".$user." json", $output, $return_var);
+        $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);
+        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_web_domain_ip ".$v_username." ".$v_domain." ".$v_ip." 'no'", $output, $return_var);
+            if ($return_var != 0) {
+                $error = implode('<br>', $output);
+                if (empty($error)) $error = 'Error: vesta did not return any output.';
+                $_SESSION['error_msg'] = $error;
+            }
+            $restart_web = 'yes';
+            unset($output);
+            exec (VESTA_CMD."v_list_dns_domain ".$v_username." ".$v_domain." json", $output, $return_var);
+            if ((empty($_SESSION['error_msg'])) && ($return_var == 0 )) {
+                exec (VESTA_CMD."v_change_dns_domain_ip ".$v_username." ".$v_domain." ".$v_ip." 'no'", $output, $return_var);
+                if ($return_var != 0) {
+                    $error = implode('<br>', $output);
+                    if (empty($error)) $error = 'Error: vesta did not return any output.';
+                    $_SESSION['error_msg'] = $error;
+                }
+                $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);
+                    if ($return_var != 0) {
+                        $error = implode('<br>', $output);
+                        if (empty($error)) $error = 'Error: vesta did not return any output.';
+                        $_SESSION['error_msg'] = $error;
+                    }
+                    $restart_dns = 'yes';
+                }
+                unset($output);
+            }
+        }
+
+        // Template
+        if (($v_template != $_POST['v_template']) && (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);
+            if ($return_var != 0) {
+                $error = implode('<br>', $output);
+                if (empty($error)) $error = 'Error: vesta did not return any output.';
+                $_SESSION['error_msg'] = $error;
+            }
+            unset($output);
+            $restart_web = 'yes';
+        }
+
+        // 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'])) {
+                    $restart_web = 'yes';
+                    $v_template = escapeshellarg($_POST['v_template']);
+                    exec (VESTA_CMD."v_delete_web_domain_alias ".$v_username." ".$v_domain." '".$alias."' 'no'", $output, $return_var);
+                    if ($return_var != 0) {
+                        $error = implode('<br>', $output);
+                        if (empty($error)) $error = 'Error: vesta did not return any output.';
+                        $_SESSION['error_msg'] = $error;
+                    }
+                    unset($output);
+                    exec (VESTA_CMD."v_list_dns_domain ".$v_username." '".$alias."' json", $output, $return_var);
+                    if ((empty($_SESSION['error_msg'])) && ($return_var == 0 )) {
+                        exec (VESTA_CMD."v_delete_dns_domain ".$v_username." '".$alias."'", $output, $return_var);
+                        if ($return_var != 0) {
+                            $error = implode('<br>', $output);
+                            if (empty($error)) $error = 'Error: vesta did not return any output.';
+                            $_SESSION['error_msg'] = $error;
+                        }
+                        $restart_dns = 'yes';
+                    }
+                    unset($output);
+                }
+            }
+
+            $result = array_diff($aliases, $valiases);
+            foreach ($result as $alias) {
+                if (empty($_SESSION['error_msg'])) {
+                    $restart_web = 'yes';
+                    $v_template = escapeshellarg($_POST['v_template']);
+                    exec (VESTA_CMD."v_add_web_domain_alias ".$v_username." ".$v_domain." '".$alias."' 'no'", $output, $return_var);
+                    if ($return_var != 0) {
+                        $error = implode('<br>', $output);
+                        if (empty($error)) $error = 'Error: vesta did not return any output.';
+                        $_SESSION['error_msg'] = $error;
+                    }
+                    unset($output);
+                    exec (VESTA_CMD."v_list_dns_domain ".$v_username." '".$alias."' json", $output, $return_var);
+                    if ((empty($_SESSION['error_msg'])) && ($return_var == 0 )) {
+                        exec (VESTA_CMD."v_add_dns_domain ".$v_username." '".$alias."' ".$v_ip, $output, $return_var);
+                        if ($return_var != 0) {
+                            $error = implode('<br>', $output);
+                            if (empty($error)) $error = 'Error: vesta did not return any output.';
+                            $_SESSION['error_msg'] = $error;
+                        }
+                        $restart_dns = 'yes';
+                    }
+                    unset($output);
+                }
+            }
+        }
+
+        // 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('<br>', $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('<br>', $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);
+            if ($return_var != 0) {
+                $error = implode('<br>', $output);
+                if (empty($error)) $error = 'Error: vesta did not return any output.';
+                $_SESSION['error_msg'] = $error;
+            }
+            unset($output);
+            unset($v_nginx);
+            $restart_web = 'yes';
+        }
+        if ((!empty($v_nginx)) && (!empty($_POST['v_nginx'])) && (empty($_SESSION['error_msg']))) {
+            $ext = preg_replace("/\n/", " ", $_POST['v_nginx_ext']);
+            $ext = preg_replace("/,/", " ", $ext);
+            $ext = preg_replace('/\s+/', ' ',$ext);
+            $ext = trim($ext);
+            $ext = str_replace(' ', ", ", $ext);
+            if ( $v_nginx_ext != $ext ) {
+                $ext = str_replace(', ', ",", $ext);
+                exec (VESTA_CMD."v_change_web_domain_nginx_tpl ".$v_username." ".$v_domain." 'default' ".escapeshellarg($ext)." 'no'", $output, $return_var);
+                if ($return_var != 0) {
+                    $error = implode('<br>', $output);
+                    if (empty($error)) $error = 'Error: vesta did not return any output.';
+                    $_SESSION['error_msg'] = $error;
+                }
+                $v_nginx_ext = str_replace(',', ', ', $ext);
+                unset($output);
+                $restart_web = 'yes';
+            }
+        }
+        if ((empty($v_nginx)) && (!empty($_POST['v_nginx'])) && (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'";
+            if (!empty($_POST['v_nginx_ext'])) {
+                $ext = preg_replace("/\n/", " ", $_POST['v_nginx_ext']);
+                $ext = preg_replace("/,/", " ", $ext);
+                $ext = preg_replace('/\s+/', ' ',$ext);
+                $ext = trim($ext);
+                $ext = str_replace(' ', ",", $ext);
+                $v_nginx_ext = str_replace(',', ', ', $ext);
+            }
+            exec (VESTA_CMD."v_add_web_domain_nginx ".$v_username." ".$v_domain." 'default' ".escapeshellarg($ext)." 'no'", $output, $return_var);
+            if ($return_var != 0) {
+                $error = implode('<br>', $output);
+                if (empty($error)) $error = 'Error: vesta did not return any output.';
+                $_SESSION['error_msg'] = $error;
+            }
+            unset($output);
+            $v_nginx = 'default';
+            $restart_web = 'yes';
+        }
+
+        // SSL
+        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);
+            if ($return_var != 0) {
+                $error = implode('<br>', $output);
+                if (empty($error)) $error = 'Error: vesta did not return any output.';
+                $_SESSION['error_msg'] = $error;
+            }
+            unset($output);
+            $v_ssl = 'no';
+            $restart_web = 'yes';
+        }
+        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);
+                $tmpdir = $mktemp_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']));
+                    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']));
+                    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']));
+                    fclose($fp);
+                }
+
+                exec (VESTA_CMD."v_change_web_domain_sslcert ".$user." ".$v_domain." ".$tmpdir." 'no'", $output, $return_var);
+                if ($return_var != 0) {
+                    $error = implode('<br>', $output);
+                    if (empty($error)) $error = 'Error: vesta did not return any output.';
+                    $_SESSION['error_msg'] = $error;
+                }
+                unset($output);
+                $restart_web = 'yes';
+                $v_ssl_crt = $_POST['v_ssl_crt'];
+                $v_ssl_key = $_POST['v_ssl_key'];
+                $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);
+                if ($return_var != 0) {
+                    $error = implode('<br>', $output);
+                    if (empty($error)) $error = 'Error: vesta did not return any output.';
+                    $_SESSION['error_msg'] = $error;
+                }
+                $v_ssl_home = $_POST['v_ssl_home'];
+                unset($output);
+            }
+        }
+        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';
+            if ((!empty($_POST['v_ssl'])) && (empty($_POST['v_ssl_home']))) $errors[] = 'ssl home';
+            $v_ssl_home = escapeshellarg($_POST['v_ssl_home']);
+            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.";
+            } else {
+                exec ('mktemp -d', $mktemp_output, $return_var);
+                $tmpdir = $mktemp_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']));
+                    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']));
+                    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']));
+                    fclose($fp);
+                }
+                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('<br>', $output);
+                    if (empty($error)) $error = 'Error: vesta did not return any output.';
+                    $_SESSION['error_msg'] = $error;
+                }
+                unset($output);
+                $v_ssl = 'yes';
+                $restart_web = 'yes';
+                $v_ssl_crt = $_POST['v_ssl_crt'];
+                $v_ssl_key = $_POST['v_ssl_key'];
+                $v_ssl_ca = $_POST['v_ssl_ca'];
+                $v_ssl_home = $_POST['v_ssl_home'];
+            }
+        }
+
+        // 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);
+            if ($return_var != 0) {
+                $error = implode('<br>', $output);
+                if (empty($error)) $error = 'Error: vesta did not return any output.';
+                $_SESSION['error_msg'] = $error;
+            }
+            unset($output);
+            $v_stats = '';
+        }
+        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);
+            if ($return_var != 0) {
+                $error = implode('<br>', $output);
+                if (empty($error)) $error = 'Error: vesta did not return any output.';
+                $_SESSION['error_msg'] = $error;
+            }
+            unset($output);
+        }
+        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);
+            if ($return_var != 0) {
+                $error = implode('<br>', $output);
+                if (empty($error)) $error = 'Error: vesta did not return any output.';
+                $_SESSION['error_msg'] = $error;
+            }
+            unset($output);
+        }
+
+        // Web Stats Auth
+        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);
+            if ($return_var != 0) {
+                $error = implode('<br>', $output);
+                if (empty($error)) $error = 'Error: vesta did not return any output.';
+                $_SESSION['error_msg'] = $error;
+            }
+            unset($output);
+            $v_stats_user = '';
+            $v_stats_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';
+            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.";
+            } else {
+                $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 ".$v_username." ".$v_domain." ".$v_stats_user." ".$v_stats_password, $output, $return_var);
+                if ($return_var != 0) {
+                    $error = implode('<br>', $output);
+                    if (empty($error)) $error = 'Error: vesta did not return any output.';
+                    $_SESSION['error_msg'] = $error;
+                }
+                unset($output);
+                $v_stats_password = "••••••••";
+            }
+        }
+        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';
+            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_stats_user != $_POST['v_stats_user']) || ($_POST['v_stats_password'] != "••••••••" ) && (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 ".$v_username." ".$v_domain." ".$v_stats_user." ".$v_stats_password, $output, $return_var);
+                if ($return_var != 0) {
+                    $error = implode('<br>', $output);
+                    if (empty($error)) $error = 'Error: vesta did not return any output.';
+                    $_SESSION['error_msg'] = $error;
+                }
+                unset($output);
+                $v_stats_password = "••••••••";
+            }
+        }
+
+
+        // Restart web
+        if (!empty($restart_web) && (empty($_SESSION['error_msg']))) {
+            exec (VESTA_CMD."v_restart_web", $output, $return_var);
+            if ($return_var != 0) {
+                $error = implode('<br>', $output);
+                if (empty($error)) $error = 'Error: vesta did not return any output.';
+                $_SESSION['error_msg'] = $error;
+            }
+        }
+
+        // Restart dns
+        if (!empty($restart_dns) && (empty($_SESSION['error_msg']))) {
+            exec (VESTA_CMD."v_restart_dns", $output, $return_var);
+            if ($return_var != 0) {
+                $error = implode('<br>', $output);
+                if (empty($error)) $error = 'Error: vesta did not return any output.';
+                $_SESSION['error_msg'] = $error;
+            }
+        }
+
+        if (empty($_SESSION['error_msg'])) {
+            $_SESSION['ok_msg'] = "OK: changes has been saved.";
+        }
+
+    }
+    include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/menu_edit_web.html');
+    include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_web.html');
+    unset($_SESSION['error_msg']);
+    unset($_SESSION['ok_msg']);
+}
+
+// Footer
+include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html');

+ 1 - 1
web/templates/admin/add_user.html

@@ -27,7 +27,7 @@ document.v_add_user.v_password.value = randomstring;
             <tr><td class="add-text" style="padding: 10 0 0 2px;">Username</td></tr>
             <tr><td class="add-text" style="padding: 10 0 0 2px;">Username</td></tr>
             <tr><td><input type="text" size="20" class="add-input" name="v_username" <?php if (!empty($v_username)) echo "value=".$v_username;  ?> ></tr>
             <tr><td><input type="text" size="20" class="add-input" name="v_username" <?php if (!empty($v_username)) echo "value=".$v_username;  ?> ></tr>
             <tr><td class="add-text" style="padding: 10px 0 0 2px;">
             <tr><td class="add-text" style="padding: 10px 0 0 2px;">
-                Password <a href="#" onclick="randomString();" class="genpass">generate</a></td></tr>
+                Password <a onclick="randomString();" class="genpass">generate</a></td></tr>
             <tr><td><input type="text" size="20" class="add-input" name="v_password"</tr>
             <tr><td><input type="text" size="20" class="add-input" name="v_password"</tr>
             <tr><td class="add-text" style="padding: 10px 0 0 2px;">Email</td></tr>
             <tr><td class="add-text" style="padding: 10px 0 0 2px;">Email</td></tr>
             <tr><td><input type="text" size="20" class="add-input" name="v_email" <?php if (!empty($v_email)) echo "value=".$v_email; ?>></tr>
             <tr><td><input type="text" size="20" class="add-input" name="v_email" <?php if (!empty($v_email)) echo "value=".$v_email; ?>></tr>

+ 10 - 10
web/templates/admin/add_web.html

@@ -30,7 +30,7 @@
             <tr><td><select class="add-list" name="v_ip">
             <tr><td><select class="add-list" name="v_ip">
             <?php
             <?php
                 foreach ($ips as $key => $value) {
                 foreach ($ips as $key => $value) {
-                echo "\t\t\t\t<option value=\"".$key."\"";
+                    echo "\t\t\t\t<option value=\"".$key."\"";
                     if ((!empty($v_ip)) && ( $key == $_POST['v_ip'])){
                     if ((!empty($v_ip)) && ( $key == $_POST['v_ip'])){
                         echo ' selected';
                         echo ' selected';
                     }
                     }
@@ -51,16 +51,16 @@
                 }
                 }
             ?>
             ?>
                 </select></td></tr>
                 </select></td></tr>
-            <tr><td class="add-text" style="padding: 10 0 0 2px;">DNS support</td></tr>
+            <tr><td class="add-text" style="padding: 10px 0 0 2px;">DNS support</td></tr>
             <tr><td><input type="checkbox" size="20" class="add-checkbox" name="v_dns" <?php if (empty($v_dns)) echo "checked=yes"; ?>></tr>
             <tr><td><input type="checkbox" size="20" class="add-checkbox" name="v_dns" <?php if (empty($v_dns)) echo "checked=yes"; ?>></tr>
 
 
-            <tr><td class="add-text" style="padding: 10 0 0 2px;">Mail support</td></tr>
+            <tr><td class="add-text" style="padding: 10px 0 0 2px;">Mail support</td></tr>
             <tr><td><input type="checkbox" size="20" class="add-checkbox" name="v_mail" <?php if (empty($v_mail)) echo "checked=yes"; ?>></tr>
             <tr><td><input type="checkbox" size="20" class="add-checkbox" name="v_mail" <?php if (empty($v_mail)) echo "checked=yes"; ?>></tr>
-            <tr><td class="add-text" style="padding: 10 0 0 2px;"><a href="javascript:elementHideShow('advtable');" class="add-advanced">Advanced Options ⇢</a></td></tr>
-            <tr><td class="add-text" style="padding: 10 0 0 0px;">
+            <tr><td class="add-text" style="padding: 10px 0 0 2px;"><a href="javascript:elementHideShow('advtable');" class="add-advanced">Advanced Options ⇢</a></td></tr>
+            <tr><td class="add-text" style="padding: 9px 0 0 0px;">
                 <table style="display:<?php if (empty($v_adv)) echo 'none';?> ;" id="advtable">
                 <table style="display:<?php if (empty($v_adv)) echo 'none';?> ;" id="advtable">
                     <tr><td class="add-text" style="padding: 0 0 0 2px;">Aliases</td></tr>
                     <tr><td class="add-text" style="padding: 0 0 0 2px;">Aliases</td></tr>
-                    <tr><td><textarea size="20" class="add-input" name="v_aliases"><?php if (!empty($v_aliases)) echo $v_aliases;  ?></textarea></td></tr>
+                    <tr><td><textarea size="20" class="add-textinput" name="v_aliases"><?php if (!empty($v_aliases)) echo $v_aliases;  ?></textarea></td></tr>
                     <tr><td class="add-text" style="padding: 10px 0 0 2px;">Error Logging</td></tr>
                     <tr><td class="add-text" style="padding: 10px 0 0 2px;">Error Logging</td></tr>
                     <tr><td><input type="checkbox" size="20" class="add-checkbox" name="v_elog" <?php if (!empty($v_elog)) echo "checked=yes" ?>></tr>
                     <tr><td><input type="checkbox" size="20" class="add-checkbox" name="v_elog" <?php if (!empty($v_elog)) echo "checked=yes" ?>></tr>
                     <tr><td class="add-text" style="padding: 10px 0 0 2px;">Nginx Support</td></tr>
                     <tr><td class="add-text" style="padding: 10px 0 0 2px;">Nginx Support</td></tr>
@@ -68,11 +68,11 @@
                     <tr><td class="add-text" style="padding: 10px 0 0 2px;">SSL Support</td></tr>
                     <tr><td class="add-text" style="padding: 10px 0 0 2px;">SSL Support</td></tr>
                     <tr><td><input type="checkbox" size="20" class="add-checkbox" name="v_ssl" <?php if (!empty($v_ssl)) echo "checked=yes" ?>></tr>
                     <tr><td><input type="checkbox" size="20" class="add-checkbox" name="v_ssl" <?php if (!empty($v_ssl)) echo "checked=yes" ?>></tr>
                     <tr><td class="add-text" style="padding: 10px 0 0 2px;">SSL Certificate</td></tr>
                     <tr><td class="add-text" style="padding: 10px 0 0 2px;">SSL Certificate</td></tr>
-                    <tr><td><textarea size="20" class="add-input" name="v_ssl_cert"><?php if (!empty($v_ssl_cert)) echo $v_ssl_cert;  ?></textarea></tr>
+                    <tr><td><textarea size="20" class="add-textinput" name="v_ssl_crt"><?php if (!empty($v_ssl_crt)) echo $v_ssl_crt;  ?></textarea></tr>
                     <tr><td class="add-text" style="padding: 10px 0 0 2px;">SSL Key</td></tr>
                     <tr><td class="add-text" style="padding: 10px 0 0 2px;">SSL Key</td></tr>
-                    <tr><td><textarea size="20" class="add-input" name="v_ssl_key"><?php if (!empty($v_ssl_key)) echo $v_ssl_key;  ?></textarea></tr>
-                    <tr><td class="add-text" style="padding: 10px 0 0 2px;">SSL PEM</td></tr>
-                    <tr><td><textarea size="20" class="add-input" name="v_ssl_pem"><?php if (!empty($v_ssl_pem)) echo $v_ssl_pem;  ?></textarea></tr>
+                    <tr><td><textarea size="20" class="add-textinput" name="v_ssl_key"><?php if (!empty($v_ssl_key)) echo $v_ssl_key;  ?></textarea></tr>
+                    <tr><td class="add-text" style="padding: 10px 0 0 2px;">SSL Certificate Authority <span style="padding:0 0 0 6px; font-size: 10pt; color:#555;">(optional)</span></td></tr>
+                    <tr><td><textarea size="20" class="add-textinput" name="v_ssl_ca"><?php if (!empty($v_ssl_ca)) echo $v_ssl_ca;  ?></textarea></tr>
                     <tr><td class="add-text" style="padding: 10px 0 0 2px;">Web Statistics</td></tr>
                     <tr><td class="add-text" style="padding: 10px 0 0 2px;">Web Statistics</td></tr>
                     <tr><td><select class="add-list" name="v_stats">
                     <tr><td><select class="add-list" name="v_stats">
                     <?php
                     <?php

+ 121 - 0
web/templates/admin/edit_web.html

@@ -0,0 +1,121 @@
+<script type="text/javascript">
+  function elementHideShow(elementToHideOrShow)
+    {
+      var el = document.getElementById(elementToHideOrShow);
+      if (el.style.display == "block") {
+        el.style.display = "none";
+      } else {
+        el.style.display = "block";
+      }
+    }
+    function randomString() {
+        var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
+        var string_length = 10;
+        var randomstring = '';
+        for (var i=0; i<string_length; i++) {
+          var rnum = Math.floor(Math.random() * chars.length);
+          randomstring += chars.substring(rnum,rnum+1);
+        }
+        document.getElementById('v_password').value = randomstring;
+    }
+</script>
+<table class='data'>
+<tr class="data-add">
+    <td class="data-dotted" style="padding: 0px 10px 0px 0px" width="150">
+        <table class="data-col1">
+            <tr><td style="padding: 20px 0 4px 4px;"><a class="data-date" ?><?php echo date("d M Y", strtotime($v_date))?></a></td></tr>
+            <tr><td style="padding: 0 0 6px 4px;"><a class="data-date" ?><?php echo $v_time?></a></td></tr>
+            <tr><td style="padding: 0 0 0 24px;" class="data-<?php echo $v_status ?>"><i><b><?php echo $v_status ?></b></i></td></tr>
+        </table>
+    </td>
+    <td class="data-dotted" width="830px" style="vertical-align:top;">
+        <table width="830px"><tr>
+            <td></td>
+        </tr></table>
+        <form method="post" name="v_edit_user">
+        <table class="data-col2" width="830px">
+            <tr><td class="add-text" style="padding: 10 0 0 2px;">Domain</td></tr>
+            <tr><td><input type="text" size="20" class="add-input" name="v_domain" <?php if (!empty($v_domain)) echo "value=".$v_domain;  ?> disabled> <input type="hidden" name="v_domain" <?php if (!empty($v_domain)) echo "value=".$v_domain;  ?>></tr>
+            <tr><td class="add-text" style="padding: 10px 0 0 2px;">IP address</td></tr>
+            <tr><td><select class="add-list" name="v_ip">
+            <?php
+                foreach ($ips as $key => $value) {
+                    echo "\t\t\t\t<option value=\"".$key."\"";
+                    $skey = "'".$key."'";
+                    if ((!empty($v_ip)) && ( $key == $v_ip ) || ( $skey == $v_ip )){
+                        echo ' selected';
+                    }
+                    echo ">".$key."</option>\n";
+                }
+            ?>
+                </select></td></tr>
+
+            <tr><td class="add-text" style="padding: 10px 0 0 2px;">Template</td></tr>
+            <tr><td><select class="add-list" name="v_template">
+            <?php
+                foreach ($templates as $key => $value) {
+                    echo "\t\t\t\t<option value=\"".$key."\"";
+                    $skey = "'".$key."'";
+                    if ((!empty($v_template)) && ( $key == $v_template ) || ($skey == $v_template)){
+                        echo ' selected' ;
+                    }
+                    echo ">".$key."</option>\n";
+                }
+            ?>
+                </select></td></tr>
+            <tr><td class="add-text" style="padding: 10 0 0 2px;">Aliases</td></tr>
+            <tr><td><textarea size="20" class="add-textinput" name="v_aliases"><?php if (!empty($v_aliases)) echo $v_aliases;  ?></textarea></td></tr>
+            <tr><td class="add-text" style="padding: 10px 0 0 2px;">Error Logging</td></tr>
+            <tr><td><input type="checkbox" size="20" class="add-checkbox" name="v_elog" <?php if ($v_elog == 'yes') echo "checked=yes" ?>></tr>
+            <tr><td class="add-text" style="padding: 10px 0 0 2px;">Nginx Support</td></tr>
+            <tr><td><input type="checkbox" size="20" class="add-checkbox" name="v_nginx" <?php if (!empty($v_nginx)) echo "checked=yes" ?> onclick="javascript:elementHideShow('nginxtable');"></tr>
+            <tr><td><table style="display:<?php if (empty($v_nginx)) { echo 'none';} else {echo 'block';}?> ;" id="nginxtable"><tr>
+                <tr><td class="add-text" style="padding: 9px 0 0 2px;">Nginx Supported Extentions</td></tr>
+                <tr><td><textarea size="20" class="add-textinput" name="v_nginx_ext"><?php if (!empty($v_nginx_ext)) { echo $v_nginx_ext;} else { echo 'jpg, jpeg, gif, png, ico, svg, css, zip, tgz, gz, rar, bz2, exe, pdf, doc, xls, ppt, txt, odt, ods, odp, odf, tar, bmp, rtf, js, mp3, avi, mpeg, flv, html, htm'; }  ?></textarea></tr>
+            </td></tr></tr></table>
+            <tr><td class="add-text" style="padding: 10px 0 0 2px;">SSL Support</td></tr>
+            <tr><td><input type="checkbox" size="20" class="add-checkbox" name="v_ssl" <?php if ($v_ssl == 'yes') echo "checked=yes" ?> onclick="javascript:elementHideShow('ssltable');"></tr>
+            <tr><td><table style="display:<?php if ($v_ssl == 'no' ) { echo 'none';} else {echo 'block';}?> ;" id="ssltable"><tr>
+                <tr><td class="add-text" style="padding: 9px 0 0 2px;">SSL HomeDirectory</td></tr>
+                <tr><td><select class="add-list" name="v_ssl_home">
+                    <option value='same' <?php if ($v_ssl_home == 'same') echo "selected";?> >public_html</option>
+                    <option value='single' <?php if ($v_ssl_home == 'single') echo "selected";?>>public_shtml</option>
+                </select></td></tr>
+                <tr><td class="add-text" style="padding: 10px 0 0 2px;">SSL Certificate</td></tr>
+                <tr><td><textarea size="20" class="add-textinput" name="v_ssl_crt"><?php if (!empty($v_ssl_crt)) echo $v_ssl_crt;  ?></textarea></tr>
+                <tr><td class="add-text" style="padding: 10px 0 0 2px;">SSL Key</td></tr>
+                <tr><td><textarea size="20" class="add-textinput" name="v_ssl_key"><?php if (!empty($v_ssl_key)) echo $v_ssl_key;  ?></textarea></tr>
+                <tr><td class="add-text" style="padding: 10px 0 0 2px;">SSL Certificate Authority <span style="padding:0 0 0 6px; font-size: 10pt; color:#555;">(optional)</span></td></tr>
+                <tr><td><textarea size="20" class="add-textinput" name="v_ssl_ca"><?php if (!empty($v_ssl_ca)) echo $v_ssl_ca;  ?></textarea></tr>
+            </td></tr></tr></table>
+            <tr><td class="add-text" style="padding: 10px 0 0 2px;">Web Statistics</td></tr>
+            <tr><td><select class="add-list" name="v_stats">
+            <?php
+                foreach ($stats as $key => $value) {
+                    $svalue = "'".$value."'";
+                    echo "\t\t\t\t<option value=\"".$value."\"";
+                    if (empty($v_stats)) $v_stats = 'none';
+                    if (( $value == $v_stats ) || ($svalue == $v_stats )){
+                        echo ' selected' ;
+                    }
+                    echo ">".$value."</option>\n";
+                }
+            ?>
+            </select></td></tr>
+            <tr><td class="add-text" style="padding: 10px 0 0 2px;">Web Statistic Authorization</td></tr>
+            <tr><td><input type="checkbox" size="20" class="add-checkbox" name="v_stats_auth" <?php if (!empty($v_stats_user)) echo "checked=yes" ?> onclick="javascript:elementHideShow('statstable');"> </tr>
+            <tr><td><table style="display:<?php if (empty($v_stats_user)) { echo 'none';} else {echo 'block';}?> ;" id="statstable" name="v_add_web_domain_stats_user"><tr>
+                <tr><td class="add-text" style="padding: 9px 0 0 2px;">Web Statistics Username</td></tr>
+                <tr><td><input type="text" size="20" class="add-input" name="v_stats_user" <?php if (!empty($v_stats_user)) echo "value=".$v_stats_user;  ?>></tr>
+                <tr><td class="add-text" style="padding: 10px 0 0 2px;">Web Statistics Password <a onclick="randomString();" class="genpass">generate</a></td></tr>
+                <tr><td><input type="text" size="20" class="add-input" name="v_stats_password" <?php if (!empty($v_stats_password)) echo "value=".$v_stats_password;  ?> id="v_password"></tr>
+            </td></tr></tr></table>
+            <tr><td style="padding: 24px 0 0 0;">
+                <input type="submit" class="add-button" name="save" value="Save">
+                <input type="submit" class="add-button" name="cancel" value="Cancel">
+            </td></tr>
+            </form>
+        </table>
+    </td>
+</tr>
+</table>

+ 1 - 1
web/templates/admin/list_db.html

@@ -28,7 +28,7 @@ foreach ($data as $key => $value) {
     <td class="data-dotted" width="830px" style="vertical-align:top;">
     <td class="data-dotted" width="830px" style="vertical-align:top;">
         <table width="830px"><tr>
         <table width="830px"><tr>
             <td></td>
             <td></td>
-            <td class="data-controls" width="118px"><img src="/images/new_window.png" width="8px" height="8px"><a href="#"> open web admin</a></td>
+            <td class="data-controls" width="120px"><img src="/images/new_window.png" width="8px" height="8px"><a href="#"> open web admin</a></td>
             <td class="data-controls" width="50px"><img src="/images/edit.png" width="8px" height="8px"><a href="#"> edit</a></td>
             <td class="data-controls" width="50px"><img src="/images/edit.png" width="8px" height="8px"><a href="#"> edit</a></td>
             <td class="data-controls" width="80px"><img src="/images/suspend.png" width="7px" height="8px"><a href="#"> <?php echo $spnd_action ?></a></td>
             <td class="data-controls" width="80px"><img src="/images/suspend.png" width="7px" height="8px"><a href="#"> <?php echo $spnd_action ?></a></td>
             <td class="data-controls" width="70px"><img src="/images/delete.png" width="7px" height="7px"><a href="#"> delete</a></td>
             <td class="data-controls" width="70px"><img src="/images/delete.png" width="7px" height="7px"><a href="#"> delete</a></td>

+ 2 - 2
web/templates/admin/list_mail.html

@@ -28,8 +28,8 @@ foreach ($data as $key => $value) {
     <td class="data-dotted" width="830px" style="vertical-align:top;">
     <td class="data-dotted" width="830px" style="vertical-align:top;">
         <table width="830px"><tr>
         <table width="830px"><tr>
             <td></td>
             <td></td>
-            <td class="data-controls" width="96px"><img src="/images/more.png" width="8px" height="8px"><a href="?domain=<?php echo $key ?>"> list accounts</a></td>
-            <td class="data-controls" width="92px"><img src="/images/add.png" width="8px" height="8px"><a href="?domain=<?php echo $key ?>"> add account</a></td>
+            <td class="data-controls" width="100px"><img src="/images/more.png" width="8px" height="8px"><a href="?domain=<?php echo $key ?>"> list accounts</a></td>
+            <td class="data-controls" width="98px"><img src="/images/add.png" width="8px" height="8px"><a href="?domain=<?php echo $key ?>"> add account</a></td>
             <td class="data-controls" width="50px"><img src="/images/edit.png" width="8px" height="8px"><a href="#"> edit</a></td>
             <td class="data-controls" width="50px"><img src="/images/edit.png" width="8px" height="8px"><a href="#"> edit</a></td>
             <td class="data-controls" width="80px"><img src="/images/suspend.png" width="7px" height="8px"><a href="#"> <?php echo $spnd_action ?></a></td>
             <td class="data-controls" width="80px"><img src="/images/suspend.png" width="7px" height="8px"><a href="#"> <?php echo $spnd_action ?></a></td>
             <td class="data-controls" width="70px"><img src="/images/delete.png" width="7px" height="7px"><a href="#"> delete</a></td>
             <td class="data-controls" width="70px"><img src="/images/delete.png" width="7px" height="7px"><a href="#"> delete</a></td>

+ 12 - 2
web/templates/admin/list_web.html

@@ -10,6 +10,16 @@ foreach ($data as $key => $value) {
         $status = 'active';
         $status = 'active';
         $spnd_action = 'suspend' ;
         $spnd_action = 'suspend' ;
     }
     }
+
+    if (!empty($data[$key]['SSL_HOME'])) {
+        if ($data[$key]['SSL_HOME'] == 'same') {
+            $ssl_home = 'public_html';
+        } else {
+            $ssl_home = 'public_shtml';
+        }
+    } else {
+        $ssl_home = '';
+    }
     ?>
     ?>
 
 
 <tr class="data-row">
 <tr class="data-row">
@@ -24,7 +34,7 @@ foreach ($data as $key => $value) {
     <td class="data-dotted" width="830px" style="vertical-align:top;">
     <td class="data-dotted" width="830px" style="vertical-align:top;">
         <table width="830px"><tr>
         <table width="830px"><tr>
             <td></td>
             <td></td>
-            <td class="data-controls" width="50px"><img src="/images/edit.png" width="8px" height="8px"><a href="#"> edit</a></td>
+            <td class="data-controls" width="50px"><img src="/images/edit.png" width="8px" height="8px"><a href="/edit/web/?domain=<?php echo "$key" ?>"> edit</a></td>
             <td class="data-controls" width="80px"><img src="/images/suspend.png" width="7px" height="8px"><a href="#"> <?php echo $spnd_action ?></a></td>
             <td class="data-controls" width="80px"><img src="/images/suspend.png" width="7px" height="8px"><a href="#"> <?php echo $spnd_action ?></a></td>
             <td class="data-controls" width="70px"><img src="/images/delete.png" width="7px" height="7px"><a href="#"> delete</a></td>
             <td class="data-controls" width="70px"><img src="/images/delete.png" width="7px" height="7px"><a href="#"> delete</a></td>
         </tr></table>
         </tr></table>
@@ -54,7 +64,7 @@ foreach ($data as $key => $value) {
                 <td rowspan=4 style="vertical-align:top;" width="300">
                 <td rowspan=4 style="vertical-align:top;" width="300">
                     <table width="300">
                     <table width="300">
                         <tr><td class="counter-name" width="40%">SSL Support:</td><td class="counter-value"><?php echo $data[$key]['SSL'] ?></td></tr>
                         <tr><td class="counter-name" width="40%">SSL Support:</td><td class="counter-value"><?php echo $data[$key]['SSL'] ?></td></tr>
-                        <tr><td class="counter-name">SSL Home:</td><td class="counter-value"><?php echo $data[$key]['SSL_HOME'] ?></td></tr>
+                        <tr><td class="counter-name">SSL Home:</td><td class="counter-value"><?php echo $ssl_home ?></td></tr>
                         <tr><td class="counter-name">Nginx Template:</td><td class="counter-value"><?php echo $data[$key]['NGINX'] ?></td></tr>
                         <tr><td class="counter-name">Nginx Template:</td><td class="counter-value"><?php echo $data[$key]['NGINX'] ?></td></tr>
                         <tr><td colspan="2" class="counter-name">Nginx Extentions: <a class="nginx-ext" style="padding: 0 12 0 12"><?php echo str_replace(',', ', ', $data[$key]['NGINX_EXT']) ?></td></tr>
                         <tr><td colspan="2" class="counter-name">Nginx Extentions: <a class="nginx-ext" style="padding: 0 12 0 12"><?php echo str_replace(',', ', ', $data[$key]['NGINX_EXT']) ?></td></tr>
                     </table>
                     </table>

+ 15 - 0
web/templates/admin/menu_edit_web.html

@@ -0,0 +1,15 @@
+<table class="sub-menu">
+<tr>
+    <td style="padding: 10px 2px 28px 0;" ><a class="add-name"><i>Editing Domain</i></a>
+    <?php 
+        if (!empty($_SESSION['error_msg'])) {
+            echo "<a class=\"add-error\"><i> → ".$_SESSION['error_msg']."</i></a>";
+        } else {
+            if (!empty($_SESSION['ok_msg'])) {
+                echo "<a class=\"add-ok\"><i> → ".$_SESSION['ok_msg']."</i></a>";
+            }
+        }
+    ?>
+    </td>
+</tr>
+</table>

+ 6 - 5
web/templates/admin/panel.html

@@ -1,11 +1,12 @@
 <table class="main"><tr><td>
 <table class="main"><tr><td>
 <table class="top">
 <table class="top">
 <tr>
 <tr>
-    <td width="154px"><p class="hostname"><?php echo exec('hostname') ?></p></td>
-    <td><a class="top-<?php if($TAB == 'IP' ) echo 's' ?>link" href="/list/ip/">IP Adresses </a></td>
-    <td><a class="top-<?php if($TAB == 'RRD' ) echo 's' ?>link" href="/list/rrd/">RRD Graphics</a></td>
-    <td><a class="top-<?php if($TAB == 'STATS' ) echo 's' ?>link" href="/list/stats/">Statistics</a></td>
-    <td><a class="top-<?php if($TAB == 'LOG' ) echo 's' ?>link" href="/list/log/">History Log</a></td>
+    <td width="188px"><p class="hostname"><?php echo exec('hostname') ?></p></td>
+    <td width="100px"><a class="top-<?php if($TAB == 'IP' ) echo 's' ?>link" href="/list/ip/">IP Adresses </a></td>
+    <td width="100px"><a class="top-<?php if($TAB == 'RRD' ) echo 's' ?>link" href="/list/rrd/">RRD Graphics</a></td>
+    <td width="84px"><a class="top-<?php if($TAB == 'STATS' ) echo 's' ?>link" href="/list/stats/">Statistics</a></td>
+    <td width="90px"><a class="top-<?php if($TAB == 'LOG' ) echo 's' ?>link" href="/list/log/">History Log</a></td>
+    <td></td>
     <td width="260px"><b><?php if($user != $_SESSION['user']) echo 'admin / ' ?><?php echo $user ?></b><a class="top-link" style="padding: 0 0 0 6" href="/logout/">Log out</a></td>
     <td width="260px"><b><?php if($user != $_SESSION['user']) echo 'admin / ' ?><?php echo $user ?></b><a class="top-link" style="padding: 0 0 0 6" href="/logout/">Log out</a></td>
 </tr>
 </tr>
 </table>
 </table>

+ 14 - 2
web/templates/header.html

@@ -27,7 +27,7 @@ if (!empty($_SESSION['look'])) {
 ?>
 ?>
      }
      }
     .top {
     .top {
-        background: #484243;
+        background: #574f51;
         color: #ebe2ae;
         color: #ebe2ae;
         padding: 0 10 0 0;
         padding: 0 10 0 0;
         margin-left: auto;
         margin-left: auto;
@@ -36,9 +36,11 @@ if (!empty($_SESSION['look'])) {
         font-family: Arial, Helvetica, sans-serif;
         font-family: Arial, Helvetica, sans-serif;
         font-size: 10pt;
         font-size: 10pt;
         text-align: right;
         text-align: right;
+        line-height: 1.4em;
      }
      }
 
 
     .top-link {
     .top-link {
+        font-family: 'Trebuchet MS';
         text-decoration: none;
         text-decoration: none;
         color: #dbdbdb;
         color: #dbdbdb;
      }
      }
@@ -395,7 +397,7 @@ if (!empty($_SESSION['look'])) {
 
 
     .counter-name {
     .counter-name {
         vertical-align:top;
         vertical-align:top;
-        line-height: 1em;
+        line-height: 1.2em;
         font-family: Arial, Helvetica, sans-serif;
         font-family: Arial, Helvetica, sans-serif;
         font-size: 10pt;
         font-size: 10pt;
         color: #484243;
         color: #484243;
@@ -459,6 +461,15 @@ if (!empty($_SESSION['look'])) {
         font-size: 12pt;
         font-size: 12pt;
     }
     }
 
 
+    .add-textinput {
+        width: 280px;
+        height: 120px;
+        padding: 4px;
+        font-size: 12pt;
+        color: #555;
+        font-family: Arial, Helvetica, sans-serif;
+    }
+
     .add-input {
     .add-input {
         width: 280px;
         width: 280px;
         padding: 4px;
         padding: 4px;
@@ -490,6 +501,7 @@ if (!empty($_SESSION['look'])) {
         font-family: Arial, Helvetica, sans-serif;
         font-family: Arial, Helvetica, sans-serif;
         padding: 0 5px 0 8px;
         padding: 0 5px 0 8px;
         letter-spacing: 0.1em;
         letter-spacing: 0.1em;
+        text-decoration: underline;
     }
     }
 
 
     .genpass:hover {
     .genpass:hover {

+ 13 - 1
web/test.php

@@ -1,3 +1,15 @@
+<br>
+<form method="post">
+<textarea size="20" class="add-input" name="v_ssl_cert"><?php if (!empty($v_ssl_cert)) echo $v_ssl_cert;  ?></textarea>
+<br>
+<input type="submit" name="ok" value="OK" class="add-button">
+
+<br>
 <?php
 <?php
+    if (!empty($_POST['v_ssl_cert'])) {
+        $fp = fopen("/tmp/test.crt", 'w');
+        fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_cert']));
+        fclose($fp);
+    }
 
 
-echo $_SERVER['REQUEST_URI'];
+?>