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=$(idn -t --quiet -a "$domain")
 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}
 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_valid '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=$(idn -t --quiet -a "$domain")
 ip=$3
+restart=$4
 
 # Includes
 source $VESTA/conf/vesta.conf
@@ -53,7 +54,9 @@ update_domain_zone
 #----------------------------------------------------------#
 
 # Restart named
-$BIN/v_restart_dns "$EVENT"
+if [ "$restart" != 'no' ]; then
+    $BIN/v_restart_dns "$EVENT"
+fi
 
 # Logging
 log_history "$EVENT"

+ 6 - 3
bin/v_change_web_domain_ip

@@ -1,6 +1,6 @@
 #!/bin/bash
 # 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
 # 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=$(idn -t --quiet -a "$domain")
 ip=$3
+restart=$4
 
 # Includes
 source $VESTA/conf/vesta.conf
@@ -27,7 +28,7 @@ source $VESTA/func/ip.sh
 #                    Verifications                         #
 #----------------------------------------------------------#
 
-check_args '3' "$#" 'user domain ip'
+check_args '3' "$#" 'user domain ip [restart]'
 validate_format 'user' 'domain' 'ip'
 is_system_enabled "$WEB_SYSTEM"
 is_object_valid 'user' 'USER' "$user"
@@ -84,7 +85,9 @@ decrease_ip_value "$old"
 update_object_value 'web' 'DOMAIN' "$domain" '$IP' "$ip"
 
 # Restart web server
-$BIN/v_restart_web "$EVENT"
+if [ "$restart" != 'no' ]; then
+    $BIN/v_restart_web "$EVENT"
+fi
 
 # Logging
 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
 # 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
 # of webdomain directories remains untouched.
@@ -15,6 +15,7 @@ user=$1
 domain=$(idn -t --quiet -u "$2" )
 domain_idn=$(idn -t --quiet -a "$domain")
 template=$3
+restart=$4
 
 # Includes
 source $VESTA/conf/vesta.conf
@@ -26,7 +27,7 @@ source $VESTA/func/domain.sh
 #                    Verifications                         #
 #----------------------------------------------------------#
 
-check_args '3' "$#" 'user domain template'
+check_args '3' "$#" 'user domain template [restart]'
 validate_format 'user' 'domain' 'template'
 is_system_enabled "$WEB_SYSTEM"
 is_object_valid 'user' 'USER' "$user"
@@ -170,7 +171,9 @@ for keys in $(cat $WEBTPL/apache_$template.descr|grep -v '#'); do
 done
 
 # Restart web
-$BIN/v_restart_web "$EVENT"
+if [ "$restart" != 'no' ]; then
+    $BIN/v_restart_web "$EVENT"
+fi
 
 # Logging
 log_history "$EVENT"

+ 6 - 3
bin/v_delete_web_domain_alias

@@ -1,6 +1,6 @@
 #!/bin/bash
 # 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
 # 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" )
 dom_alias=$(idn -t --quiet -u "$3" )
 dom_alias_idn=$(idn -t --quiet -a "$dom_alias" )
+restart="$4"
 
 # Includes
 source $VESTA/conf/vesta.conf
@@ -27,7 +28,7 @@ source $VESTA/func/domain.sh
 #                    Verifications                         #
 #----------------------------------------------------------#
 
-check_args '3' "$#" 'user domain dom_alias'
+check_args '3' "$#" 'user domain dom_alias [restart]'
 validate_format 'user' 'domain' 'dom_alias'
 is_system_enabled 'WEB_SYSTEM'
 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'
 
 # Restart web server
-$BIN/v_restart_web "$EVENT"
+if [ "$restart" != 'no' ]; then
+    $BIN/v_restart_web "$EVENT"
+fi
 
 # Logging
 log_history "$EVENT"

+ 6 - 3
bin/v_delete_web_domain_elog

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

+ 4 - 1
bin/v_delete_web_domain_nginx

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

+ 4 - 1
bin/v_delete_web_domain_ssl

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

+ 1 - 1
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 $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
 case $format in 

+ 1 - 1
bin/v_list_web_domains

@@ -35,7 +35,7 @@ conf=$USER_DATA/web.conf
 
 # Defining fileds to select
 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"
 
 # Listing domains

+ 1 - 1
data/packages/default.pkg

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

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

@@ -16,11 +16,6 @@
         SSLRequireSSL
         Options +Includes -Indexes %cgi_option%
         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_value session.save_path %home%/%user%/tmp
         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
         Options +Includes -Indexes %cgi_option%
         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_value session.save_path %home%/%user%/tmp
         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"
     s="$WEBTPL/ngingx_vhost_$template.stpl"
     if [ ! -e $t ] || [ ! -e $d ] || [ ! -e $s ]; then
-        echo "Error: $template not found"
+        echo "Error: nginx $template not found"
         log_event "$E_NOTEXIST" "$EVENT"
         exit $E_NOTEXIST
     fi

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

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

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

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

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

@@ -30,7 +30,7 @@
             <tr><td><select class="add-list" name="v_ip">
             <?php
                 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'])){
                         echo ' selected';
                     }
@@ -51,16 +51,16 @@
                 }
             ?>
                 </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 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 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">
                     <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><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>
@@ -68,11 +68,11 @@
                     <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 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><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><select class="add-list" name="v_stats">
                     <?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;">
         <table width="830px"><tr>
             <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="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>

+ 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;">
         <table width="830px"><tr>
             <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="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>

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

@@ -10,6 +10,16 @@ foreach ($data as $key => $value) {
         $status = 'active';
         $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">
@@ -24,7 +34,7 @@ foreach ($data as $key => $value) {
     <td class="data-dotted" width="830px" style="vertical-align:top;">
         <table width="830px"><tr>
             <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="70px"><img src="/images/delete.png" width="7px" height="7px"><a href="#"> delete</a></td>
         </tr></table>
@@ -54,7 +64,7 @@ foreach ($data as $key => $value) {
                 <td rowspan=4 style="vertical-align:top;" 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">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 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>

+ 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="top">
 <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>
 </tr>
 </table>

+ 14 - 2
web/templates/header.html

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