Ver código fonte

Merge remote-tracking branch 'refs/remotes/serghey-rodin/master'

nguyenngocphuongnb 10 anos atrás
pai
commit
c58a200780
100 arquivos alterados com 552 adições e 170 exclusões
  1. 3 0
      .gitignore
  2. 0 0
      LICENSE
  3. 67 0
      bin/v-activate-vesta-license
  4. 17 20
      bin/v-add-fs-archive
  5. 1 1
      bin/v-add-remote-dns-domain
  6. 57 0
      bin/v-add-sys-firewall
  7. 3 0
      bin/v-add-web-domain
  8. 1 1
      bin/v-add-web-domain-backend
  9. 2 0
      bin/v-backup-users
  10. 9 17
      bin/v-check-fs-permission
  11. 63 0
      bin/v-check-vesta-license
  12. 65 0
      bin/v-deactivate-vesta-license
  13. 2 1
      bin/v-delete-firewall-ban
  14. 1 1
      bin/v-delete-remote-dns-record
  15. 48 0
      bin/v-delete-sys-firewall
  16. 3 3
      bin/v-delete-sys-sftp-jail
  17. 1 1
      bin/v-get-fs-file-type
  18. 0 1
      bin/v-list-fs-directory
  19. 6 6
      bin/v-list-sys-vesta-updates
  20. 1 1
      func/main.sh
  21. BIN
      install/debian/7/dovecot.tar.gz
  22. BIN
      install/debian/7/fail2ban.tar.gz
  23. BIN
      install/debian/7/firewall.tar.gz
  24. BIN
      install/debian/7/packages.tar.gz
  25. BIN
      install/debian/7/templates.tar.gz
  26. BIN
      install/debian/8/dovecot.tar.gz
  27. BIN
      install/debian/8/fail2ban.tar.gz
  28. BIN
      install/debian/8/firewall.tar.gz
  29. BIN
      install/debian/8/packages.tar.gz
  30. BIN
      install/debian/8/templates.tar.gz
  31. BIN
      install/rhel/5/dovecot.tar.gz
  32. BIN
      install/rhel/5/fail2ban.tar.gz
  33. BIN
      install/rhel/5/firewall.tar.gz
  34. BIN
      install/rhel/5/packages.tar.gz
  35. BIN
      install/rhel/5/templates.tar.gz
  36. BIN
      install/rhel/6/dovecot.tar.gz
  37. BIN
      install/rhel/6/fail2ban.tar.gz
  38. BIN
      install/rhel/6/firewall.tar.gz
  39. BIN
      install/rhel/6/packages.tar.gz
  40. BIN
      install/rhel/6/templates.tar.gz
  41. BIN
      install/rhel/7/dovecot.tar.gz
  42. BIN
      install/rhel/7/fail2ban.tar.gz
  43. BIN
      install/rhel/7/firewall.tar.gz
  44. BIN
      install/rhel/7/packages.tar.gz
  45. BIN
      install/rhel/7/templates.tar.gz
  46. BIN
      install/ubuntu/12.04/dovecot.tar.gz
  47. BIN
      install/ubuntu/12.04/fail2ban.tar.gz
  48. BIN
      install/ubuntu/12.04/firewall.tar.gz
  49. BIN
      install/ubuntu/12.04/packages.tar.gz
  50. BIN
      install/ubuntu/12.04/templates.tar.gz
  51. BIN
      install/ubuntu/12.10/dovecot.tar.gz
  52. BIN
      install/ubuntu/12.10/fail2ban.tar.gz
  53. BIN
      install/ubuntu/12.10/firewall.tar.gz
  54. BIN
      install/ubuntu/12.10/packages.tar.gz
  55. BIN
      install/ubuntu/12.10/templates.tar.gz
  56. BIN
      install/ubuntu/13.04/dovecot.tar.gz
  57. BIN
      install/ubuntu/13.04/fail2ban.tar.gz
  58. BIN
      install/ubuntu/13.04/firewall.tar.gz
  59. BIN
      install/ubuntu/13.04/packages.tar.gz
  60. BIN
      install/ubuntu/13.04/templates.tar.gz
  61. BIN
      install/ubuntu/13.10/dovecot.tar.gz
  62. BIN
      install/ubuntu/13.10/fail2ban.tar.gz
  63. BIN
      install/ubuntu/13.10/firewall.tar.gz
  64. BIN
      install/ubuntu/13.10/packages.tar.gz
  65. BIN
      install/ubuntu/13.10/templates.tar.gz
  66. BIN
      install/ubuntu/14.04/dovecot.tar.gz
  67. BIN
      install/ubuntu/14.04/fail2ban.tar.gz
  68. BIN
      install/ubuntu/14.04/firewall.tar.gz
  69. BIN
      install/ubuntu/14.04/packages.tar.gz
  70. BIN
      install/ubuntu/14.04/templates.tar.gz
  71. BIN
      install/ubuntu/14.10/dovecot.tar.gz
  72. BIN
      install/ubuntu/14.10/fail2ban.tar.gz
  73. BIN
      install/ubuntu/14.10/firewall.tar.gz
  74. BIN
      install/ubuntu/14.10/packages.tar.gz
  75. BIN
      install/ubuntu/14.10/templates.tar.gz
  76. BIN
      install/ubuntu/15.04/dovecot.tar.gz
  77. BIN
      install/ubuntu/15.04/fail2ban.tar.gz
  78. BIN
      install/ubuntu/15.04/firewall.tar.gz
  79. BIN
      install/ubuntu/15.04/packages.tar.gz
  80. BIN
      install/ubuntu/15.04/templates.tar.gz
  81. 3 0
      install/vst-install-debian.sh
  82. 3 0
      install/vst-install-rhel.sh
  83. 3 0
      install/vst-install-ubuntu.sh
  84. 1 1
      src/deb/nginx/control
  85. 1 1
      src/deb/php/control
  86. 1 1
      src/deb/vesta/control
  87. 3 24
      src/deb/vesta/postinst
  88. 8 5
      src/rpm/conf/php-fpm.conf
  89. 1 1
      src/rpm/specs/vesta-nginx.spec
  90. 1 1
      src/rpm/specs/vesta-php.spec
  91. 29 15
      src/rpm/specs/vesta.spec
  92. 10 0
      upd/add_notifications.sh
  93. 13 5
      upd/add_sudo.sh
  94. 1 1
      web/add/firewall/index.php
  95. 0 2
      web/bulk/web/index.php
  96. 6 5
      web/css/file_manager.css
  97. 2 2
      web/css/file_manager_editor.css
  98. 69 48
      web/css/styles.min.css
  99. 30 0
      web/delete/notification/index.php
  100. 17 5
      web/download/file/index.php

+ 3 - 0
.gitignore

@@ -0,0 +1,3 @@
+*.tar
+*.zip
+*.gzip

+ 0 - 0
LICENSE.txt → LICENSE


+ 67 - 0
bin/v-activate-vesta-license

@@ -0,0 +1,67 @@
+#!/bin/bash
+# info: activate vesta license
+# options: MODULE LICENSE
+#
+# The function activates and register vesta license
+
+
+#----------------------------------------------------------#
+#                    Variable&Function                     #
+#----------------------------------------------------------#
+
+# Argument defenition
+module=$(echo $1 | tr '[:lower:]' '[:upper:]')
+license=$2
+
+# Importing system enviroment
+source /etc/profile
+
+# Includes
+source $VESTA/func/main.sh
+source $VESTA/conf/vesta.conf
+
+
+#----------------------------------------------------------#
+#                    Verifications                         #
+#----------------------------------------------------------#
+
+# Checking arg number
+check_args '2' "$#" 'MODULE LICENSE'
+
+
+#----------------------------------------------------------#
+#                       Action                             #
+#----------------------------------------------------------#
+
+# Activating license
+v_host='https://vestacp.com/checkout'
+answer=$(curl -s $v_host/activate.php?licence_key=$license&module=$module)
+check_result $? "cant' connect to vestacp.com " $E_CONNECT
+
+# Checking server answer
+if [[ "$answer" != '0' ]]; then
+    echo "Error: $module license $license is invalid"
+    exit $E_INVALID
+fi
+
+
+#----------------------------------------------------------#
+#                       Vesta                              #
+#----------------------------------------------------------#
+
+# Updating vesta.conf
+if [ -z "$(grep "${module}_KEY" $VESTA/conf/vesta.conf)" ]; then
+    echo "${module}_KEY='$license'" >> $VESTA/conf/vesta.conf
+else
+    sed -i "s/${module}_KEY=.*/${module}_KEY='$license'/g" $VESTA/conf/vesta.conf
+fi
+
+# Activating sftpjail
+if [ "$module" = 'SFTPJAIL' ]; then
+    setsid $BIN/v-add-sys-sftp-jail 2>/dev/null
+fi
+
+# Logging
+log_event "$OK" "$EVENT"
+
+exit

+ 17 - 20
bin/v-add-fs-archive

@@ -1,22 +1,16 @@
 #!/bin/bash
 # info: archive directory
-# options: USER ARCHIVE DIRECTORY [DIRECTORY_N]
+# options: USER ARCHIVE SOURCE
 #
 # The function creates tar archive
 
 user=$1
 archive=$2
-src1=$3
-src2=$4
-src3=$5
-src4=$6
-src5=$7
-src6=$8
-src7=$9
+src=$3
 
 # Checking arguments
-if [ -z "$src1" ]; then
-    echo "Usage: USER ARCHIVE DIRECTORY [DIRECTORY_N]"
+if [ -z "$src" ]; then
+    echo "Usage: USER ARCHIVE SOURCE"
     exit 1
 fi
 
@@ -40,19 +34,22 @@ if [ -e "$archive.tar.gz" ]; then
 fi
 
 # Checking source path
-for src_path in $src1 $src2 $src3 $src4 $src5 $src6 $src7; do
-    rpath=$(readlink -f "$src_path")
-    if [ -z "$(echo $rpath |egrep "^/tmp|^$homedir")" ]; then
-        echo "Error: invalid source path $src_path"
-        exit 1
-    fi
-done
+rpath=$(readlink -f "$src")
+if [ -z "$(echo $rpath |egrep "^/tmp|^$homedir")" ]; then
+    echo "Error: invalid source path $src"
+    exit 1
+fi
+
+# Parsing current directory
+d=$(dirname "$src")
+
+# Removing leading file path
+f=$(echo "$src" |sed -e "s|$d/||")
 
 # Creating tar.gz archive
-sudo -u $user tar -czf "$archive.tar.gz" \
-    $src1 $src2 $src3 $src4 $src5 $src6 $src7 > /dev/null 2>&1
+sudo -u $user tar -czf "$archive.tar.gz" -C $d $f >/dev/null 2>&1
 if [ "$?" -ne 0 ]; then
-#    echo "Error: archive $archive.tar.gz was not created"
+    echo "Error: archive $archive.tar.gz was not created"
     exit 3
 fi
 

+ 1 - 1
bin/v-add-remote-dns-domain

@@ -44,7 +44,7 @@ remote_dns_health_check
 str=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf 2>/dev/null)
 if [ -z "$str" ]; then
     pipe="$VESTA/data/queue/dns-cluster.pipe"
-    queue_str=$(grep -n "$SCRIPT $1 $2 no$" $pipe |cut -f1 -d: |head -n1)
+    queue_str=$(grep -n "$SCRIPT $1 $2 " $pipe |cut -f1 -d: |head -n1)
     if [ ! -z "$queue_str" ]; then
         sed -i "$queue_str d"  $pipe
     fi

+ 57 - 0
bin/v-add-sys-firewall

@@ -0,0 +1,57 @@
+#!/bin/bash
+# info: add system firewall
+# opions: NONE
+#
+# The script enables firewall
+
+
+#----------------------------------------------------------#
+#                    Variable&Function                     #
+#----------------------------------------------------------#
+
+# Includes
+source $VESTA/func/main.sh
+source $VESTA/conf/vesta.conf
+
+
+#----------------------------------------------------------#
+#                    Verifications                         #
+#----------------------------------------------------------#
+
+if [ "$FIREWALL_SYSTEM" = 'iptables' ]; then
+    exit
+fi
+
+
+#----------------------------------------------------------#
+#                       Action                             #
+#----------------------------------------------------------#
+
+# Adding firewall directory
+mkdir -p $VESTA/data/firewall/
+
+# Adding default ruleset
+if [ ! -e "$VESTA/data/firewall/rules.conf" ]; then
+    cp $VESTA/install/rhel/7/* $VESTA/data/firewall/
+fi
+
+# Updating FIREWAL_SYSTEM value
+if [ -z "$(grep FIREWALL_SYSTEM $VESTA/conf/vesta.conf)" ]; then
+    echo "FIREWALL_SYSTEM='iptables'" >> $VESTA/conf/vesta.conf
+else
+    sed -i "s/FIREWALL_SYSTEM.*/FIREWALL_SYSTEM='iptables'/g" \
+        $VESTA/conf/vesta.conf
+fi
+
+# Updating firewall rules
+$BIN/v-update-firewall
+
+
+#----------------------------------------------------------#
+#                       Vesta                              #
+#----------------------------------------------------------#
+
+# Logging
+log_event "$OK" "$EVENT"
+
+exit

+ 3 - 0
bin/v-add-web-domain

@@ -75,6 +75,9 @@ if [ ! -z "$WEB_BACKEND" ]; then
     fi
     get_domain_backend_values
     backend=$(get_user_value '$BACKEND_TEMPLATE')
+    if [ -z "$backend" ]; then
+        backend='default'
+    fi
 fi
 
 # Defining variables for add_config function

+ 1 - 1
bin/v-add-web-domain-backend

@@ -13,7 +13,7 @@
 user=$1
 domain=$2
 domain_idn=$(idn -t --quiet -a "$domain")
-template=$3
+template=${3-default}
 
 # Includes
 source $VESTA/func/main.sh

+ 2 - 0
bin/v-backup-users

@@ -22,6 +22,8 @@ source $VESTA/conf/vesta.conf
 #                       Action                             #
 #----------------------------------------------------------#
 
+$BIN/v-check-vesta-license >/dev/null
+
 if [ -z "$BACKUP_SYSTEM" ]; then
     exit
 fi

+ 9 - 17
bin/v-check-fs-permission

@@ -5,10 +5,10 @@
 # The function opens/reads files on the file system
 
 user=$1
-src_file=$2
+src=$2
 
 # Checking arguments
-if [ -z "$src_file" ]; then
+if [ -z "$src" ]; then
     echo "Usage: USER FILE"
     exit 1
 fi
@@ -27,27 +27,19 @@ if [ -z $homedir ]; then
 fi
 
 # Checking path
-if [ ! -z "$src_file" ]; then
-    rpath=$(readlink -f "$src_file")
+if [ ! -z "$src" ]; then
+    rpath=$(readlink -f "$src")
     if [ -z "$(echo $rpath |egrep "^/tmp|^$homedir")" ]; then
-        echo "Error: invalid source path $src_file"
+        echo "Error: invalid source path $user $src"
         exit 2
     fi
 fi
 
-# Reading file
-#sudo -u $user cat "$src_file" 2>/dev/null
-#if [ $? -ne 0 ]; then
-#    echo "Error: file $src_file was not opened"
-#    exit 3
-#fi
-
 # Checking if file has readable permission
-if [[ ! -r $src_file ]]
-then
-#  echo "File is readable"
-#else
-  echo "Cannot read file"
+sudo -u $user ls "$src" > /dev/null 2>&1
+if [ $? -ne 0 ]; then
+    echo "Error: can't read $src"
+    exit 1
 fi
 
 # Exiting

+ 63 - 0
bin/v-check-vesta-license

@@ -0,0 +1,63 @@
+#!/bin/bash
+# info: check vesta license
+# options: [MODULE]
+#
+# The function activates and register vesta license
+
+
+#----------------------------------------------------------#
+#                    Variable&Function                     #
+#----------------------------------------------------------#
+
+# Argument defenition
+module=$(echo $1 | tr '[:lower:]' '[:upper:]')
+
+# Importing system enviroment
+source /etc/profile
+
+# Includes
+source $VESTA/func/main.sh
+source $VESTA/conf/vesta.conf
+
+
+#----------------------------------------------------------#
+#                    Verifications                         #
+#----------------------------------------------------------#
+
+
+#----------------------------------------------------------#
+#                       Action                             #
+#----------------------------------------------------------#
+
+# Checking module
+if [ -z "$module" ]; then
+    modules=$(grep _KEY= $VESTA/conf/vesta.conf)
+else
+    modules=$(grep "${module}_KEY" $VESTA/conf/vesta.conf)
+fi
+
+IFS=$'\n'
+for str in $modules; do
+    module=$(echo "$str" |cut -f 1 -d _)
+    license=$(echo "$str" |cut -f 2 -d \')
+    if [ ! -z "$license" ]; then
+        v_host='https://vestacp.com/checkout'
+        answer=$(curl -s "$v_host/check.php?licence_key=$license&module=$module")
+        check_result $? "cant' connect to vestacp.com " 0
+        echo "$module $license $answer"
+        if [[ "$answer" != '0' ]]; then
+            if [ "$module" = 'SFTPJAIL' ]; then
+                setsid $BIN/v-delete-sys-sftp-jail 2>/dev/null
+            fi
+            sed -i "s/${module}_KEY=.*/${module}_KEY=''/g" \
+                $VESTA/conf/vesta.conf
+        fi
+    fi
+done
+
+
+#----------------------------------------------------------#
+#                       Vesta                              #
+#----------------------------------------------------------#
+
+exit

+ 65 - 0
bin/v-deactivate-vesta-license

@@ -0,0 +1,65 @@
+#!/bin/bash
+# info: deactivate vesta license
+# options: MODULE LICENSE
+#
+# The function activates and register vesta license
+
+
+#----------------------------------------------------------#
+#                    Variable&Function                     #
+#----------------------------------------------------------#
+
+# Argument defenition
+module=$(echo $1 | tr '[:lower:]' '[:upper:]')
+license=$2
+
+# Importing system enviroment
+source /etc/profile
+
+# Includes
+source $VESTA/func/main.sh
+source $VESTA/conf/vesta.conf
+
+
+#----------------------------------------------------------#
+#                    Verifications                         #
+#----------------------------------------------------------#
+
+# Checking arg number
+check_args '2' "$#" 'MODULE LICENSE'
+
+
+#----------------------------------------------------------#
+#                       Action                             #
+#----------------------------------------------------------#
+
+# Activating license
+v_host='https://vestacp.com/checkout'
+answer=$(curl -s $v_host/cancel.php?licence_key=$license)
+check_result $? "cant' connect to vestacp.com " $E_CONNECT
+
+# Checking server answer
+if [[ "$answer" != '0' ]]; then
+    echo "Error: $module license $license is invalid"
+    exit $E_INVALID
+fi
+
+
+#----------------------------------------------------------#
+#                       Vesta                              #
+#----------------------------------------------------------#
+
+# Updating vesta.conf
+if [ ! -z "$(grep "${module}_KEY" $VESTA/conf/vesta.conf)" ]; then
+    sed -i "s/${module}_KEY=.*/${module}_KEY=''/g" $VESTA/conf/vesta.conf
+fi
+
+# Deactivating sftpjail
+if [ "$module" = 'SFTPJAIL' ]; then
+    setsid $BIN/v-delete-sys-sftp-jail 2>/dev/null
+fi
+
+# Logging
+log_event "$OK" "$EVENT"
+
+exit

+ 2 - 1
bin/v-delete-firewall-ban

@@ -45,7 +45,8 @@ if [ -z "$check_ip" ]; then
 fi
 
 # Deleting ip from banlist
-sed -i "/IP='$ip' CHAIN='$chain'/d" $conf
+sip=$(echo "$ip"| sed "s|/|\\\/|g")
+sed -i "/IP='$sip' CHAIN='$chain'/d" $conf
 b=$($iptables -L fail2ban-$chain --line-number -n|grep $ip|awk '{print $1}')
 $iptables -D fail2ban-$chain $b 2>/dev/null
 

+ 1 - 1
bin/v-delete-remote-dns-record

@@ -55,7 +55,7 @@ for cluster in $(cat $VESTA/conf/dns-cluster.conf); do
 
     # Sync domain
     cluster_cmd v-delete-dns-record $DNS_USER $domain $id 'no'
-    check_result $? "$HOST connection failed (rebuild)" $E_CONNECT
+    #check_result $? "$HOST connection failed (delete)" $E_CONNECT
 
     # Rebuilding dns zone
     cluster_cmd v-rebuild-dns-domain $DNS_USER $domain 'yes' 'no'

+ 48 - 0
bin/v-delete-sys-firewall

@@ -0,0 +1,48 @@
+#!/bin/bash
+# info: delete system firewall
+# opions: NONE
+#
+# The script disables firewall support
+
+
+#----------------------------------------------------------#
+#                    Variable&Function                     #
+#----------------------------------------------------------#
+
+# Includes
+source $VESTA/func/main.sh
+source $VESTA/conf/vesta.conf
+
+
+#----------------------------------------------------------#
+#                    Verifications                         #
+#----------------------------------------------------------#
+
+if [ -z "$FIREWALL_SYSTEM" ]; then
+    exit
+fi
+
+
+#----------------------------------------------------------#
+#                       Action                             #
+#----------------------------------------------------------#
+
+# Stopping firewall
+$BIN/v-stop-firewall
+
+# Updating FIREWALL_SYSTEM value
+if [ -z "$(grep FIREWALL_SYSTEM $VESTA/conf/vesta.conf)" ]; then
+    echo "FIREWALL_SYSTEM=''" >> $VESTA/conf/vesta.conf
+else
+    sed -i "s/FIREWALL_SYSTEM=.*/FIREWALL_SYSTEM=''/g" $VESTA/conf/vesta.conf
+fi
+
+
+#----------------------------------------------------------#
+#                       Vesta                              #
+#----------------------------------------------------------#
+
+# Logging
+log_event "$OK" "$EVENT"
+
+exit

+ 3 - 3
bin/v-delete-sys-sftp-jail

@@ -22,9 +22,9 @@ source $VESTA/conf/vesta.conf
 #                    Verifications                         #
 #----------------------------------------------------------#
 
-if [ -z "$SFTPJAIL_KEY" ]; then
-    exit
-fi
+#if [ -z "$SFTPJAIL_KEY" ]; then
+#    exit
+#fi
 
 
 #----------------------------------------------------------#

+ 1 - 1
bin/v-get-fs-file-type

@@ -34,7 +34,7 @@ if [ -z "$(echo $rpath |grep $homedir)" ]; then
 fi
 
 # Listing file type
-sudo -u $user file -i -b $path 2>/dev/null
+sudo -u $user file -i -b "$path" 2>/dev/null
 
 # Exiting
 exit $?

+ 0 - 1
bin/v-list-fs-directory

@@ -40,7 +40,6 @@ fi
 # Listing directory
 sudo -u $user find "$path" -maxdepth 1 \
     -printf "%y|%m|%TY-%Tm-%Td|%TH:%TM|%u|%g|%s|%P\n" 2>/dev/null
-#    -printf "%y|%m|%TY-%Tm-%Td|%TH:%TM:%TS|%u|%g|%s|%P\n" 2>/dev/null
 
 # Exiting
 exit $?

+ 6 - 6
bin/v-list-sys-vesta-updates

@@ -42,8 +42,8 @@ else
     dpkg_data=$(dpkg-query -s vesta)
     pkg_date=$(stat -c "%Y" /var/lib/dpkg/info/vesta.list)
     ARCH=$(echo "$dpkg_data"|grep Architecture | cut -f 2 -d ' ')
-    VERSION=$(echo "$dpkg_data"|grep Version |cut -f 2 -d ' '|cut -f 1 -d \-)
-    RELEASE=$(echo "$dpkg_data"|grep Version |cut -f 2 -d ' '|cut -f 2 -d \-)
+    VERSION=$(echo "$dpkg_data"|grep ^Version |cut -f 2 -d ' '|cut -f 1 -d \-)
+    RELEASE=$(echo "$dpkg_data"|grep ^Version |cut -f 2 -d ' '|cut -f 2 -d \-)
     DATE=$(date -d @$pkg_date +"%F")
     TIME=$(date -d @$pkg_date +"%T")
 fi
@@ -65,8 +65,8 @@ else
     dpkg_data=$(dpkg-query -s vesta-php)
     pkg_date=$(stat -c "%Y" /var/lib/dpkg/info/vesta-php.list)
     ARCH=$(echo "$dpkg_data"|grep Architecture | cut -f 2 -d ' ')
-    VERSION=$(echo "$dpkg_data"|grep Version |cut -f 2 -d ' '|cut -f 1 -d \-)
-    RELEASE=$(echo "$dpkg_data"|grep Version |cut -f 2 -d ' '|cut -f 2 -d \-)
+    VERSION=$(echo "$dpkg_data"|grep ^Version |cut -f 2 -d ' '|cut -f 1 -d \-)
+    RELEASE=$(echo "$dpkg_data"|grep ^Version |cut -f 2 -d ' '|cut -f 2 -d \-)
     DATE=$(date -d @$pkg_date +"%F")
     TIME=$(date -d @$pkg_date +"%T")
 fi
@@ -89,8 +89,8 @@ else
     dpkg_data=$(dpkg-query -s vesta-nginx)
     pkg_date=$(stat -c "%Y" /var/lib/dpkg/info/vesta-nginx.list)
     ARCH=$(echo "$dpkg_data"|grep Architecture | cut -f 2 -d ' ')
-    VERSION=$(echo "$dpkg_data"|grep Version |cut -f 2 -d ' '|cut -f 1 -d \-)
-    RELEASE=$(echo "$dpkg_data"|grep Version |cut -f 2 -d ' '|cut -f 2 -d \-)
+    VERSION=$(echo "$dpkg_data"|grep ^Version |cut -f 2 -d ' '|cut -f 1 -d \-)
+    RELEASE=$(echo "$dpkg_data"|grep ^Version |cut -f 2 -d ' '|cut -f 2 -d \-)
     DATE=$(date -d @$pkg_date +"%F")
     TIME=$(date -d @$pkg_date +"%T")
 fi

+ 1 - 1
func/main.sh

@@ -341,7 +341,7 @@ search_objects() {
 
 # Get user value
 get_user_value() {
-    grep "^${1//$/}=" $USER_DATA/user.conf| cut -f 2 -d \'
+    grep "^${1//$/}=" $USER_DATA/user.conf |awk -F "'" '{print $2}'
 }
 
 # Update user value in user.conf

BIN
install/debian/7/dovecot.tar.gz


BIN
install/debian/7/fail2ban.tar.gz


BIN
install/debian/7/firewall.tar.gz


BIN
install/debian/7/packages.tar.gz


BIN
install/debian/7/templates.tar.gz


BIN
install/debian/8/dovecot.tar.gz


BIN
install/debian/8/fail2ban.tar.gz


BIN
install/debian/8/firewall.tar.gz


BIN
install/debian/8/packages.tar.gz


BIN
install/debian/8/templates.tar.gz


BIN
install/rhel/5/dovecot.tar.gz


BIN
install/rhel/5/fail2ban.tar.gz


BIN
install/rhel/5/firewall.tar.gz


BIN
install/rhel/5/packages.tar.gz


BIN
install/rhel/5/templates.tar.gz


BIN
install/rhel/6/dovecot.tar.gz


BIN
install/rhel/6/fail2ban.tar.gz


BIN
install/rhel/6/firewall.tar.gz


BIN
install/rhel/6/packages.tar.gz


BIN
install/rhel/6/templates.tar.gz


BIN
install/rhel/7/dovecot.tar.gz


BIN
install/rhel/7/fail2ban.tar.gz


BIN
install/rhel/7/firewall.tar.gz


BIN
install/rhel/7/packages.tar.gz


BIN
install/rhel/7/templates.tar.gz


BIN
install/ubuntu/12.04/dovecot.tar.gz


BIN
install/ubuntu/12.04/fail2ban.tar.gz


BIN
install/ubuntu/12.04/firewall.tar.gz


BIN
install/ubuntu/12.04/packages.tar.gz


BIN
install/ubuntu/12.04/templates.tar.gz


BIN
install/ubuntu/12.10/dovecot.tar.gz


BIN
install/ubuntu/12.10/fail2ban.tar.gz


BIN
install/ubuntu/12.10/firewall.tar.gz


BIN
install/ubuntu/12.10/packages.tar.gz


BIN
install/ubuntu/12.10/templates.tar.gz


BIN
install/ubuntu/13.04/dovecot.tar.gz


BIN
install/ubuntu/13.04/fail2ban.tar.gz


BIN
install/ubuntu/13.04/firewall.tar.gz


BIN
install/ubuntu/13.04/packages.tar.gz


BIN
install/ubuntu/13.04/templates.tar.gz


BIN
install/ubuntu/13.10/dovecot.tar.gz


BIN
install/ubuntu/13.10/fail2ban.tar.gz


BIN
install/ubuntu/13.10/firewall.tar.gz


BIN
install/ubuntu/13.10/packages.tar.gz


BIN
install/ubuntu/13.10/templates.tar.gz


BIN
install/ubuntu/14.04/dovecot.tar.gz


BIN
install/ubuntu/14.04/fail2ban.tar.gz


BIN
install/ubuntu/14.04/firewall.tar.gz


BIN
install/ubuntu/14.04/packages.tar.gz


BIN
install/ubuntu/14.04/templates.tar.gz


BIN
install/ubuntu/14.10/dovecot.tar.gz


BIN
install/ubuntu/14.10/fail2ban.tar.gz


BIN
install/ubuntu/14.10/firewall.tar.gz


BIN
install/ubuntu/14.10/packages.tar.gz


BIN
install/ubuntu/14.10/templates.tar.gz


BIN
install/ubuntu/15.04/dovecot.tar.gz


BIN
install/ubuntu/15.04/fail2ban.tar.gz


BIN
install/ubuntu/15.04/firewall.tar.gz


BIN
install/ubuntu/15.04/packages.tar.gz


BIN
install/ubuntu/15.04/templates.tar.gz


+ 3 - 0
install/vst-install-debian.sh

@@ -1176,6 +1176,9 @@ update-rc.d vesta defaults
 service vesta start
 check_result $? "vesta start failed"
 
+# Adding notifications
+$VESTA/upd/add_notifications.sh
+
 
 #----------------------------------------------------------#
 #                   Vesta Access Info                      #

+ 3 - 0
install/vst-install-rhel.sh

@@ -1245,6 +1245,9 @@ chkconfig vesta on
 service vesta start
 check_result $? "vesta start failed"
 
+# Adding notifications
+$VESTA/upd/add_notifications.sh
+
 
 #----------------------------------------------------------#
 #                   Vesta Access Info                      #

+ 3 - 0
install/vst-install-ubuntu.sh

@@ -1165,6 +1165,9 @@ update-rc.d vesta defaults
 service vesta start
 check_result $? "vesta start failed"
 
+# Adding notifications
+$VESTA/upd/add_notifications.sh
+
 
 #----------------------------------------------------------#
 #                   Vesta Access Info                      #

+ 1 - 1
src/deb/nginx/control

@@ -1,7 +1,7 @@
 Source: vesta-nginx
 Package: vesta-nginx
 Priority: optional
-Version: 0.9.7-3
+Version: 0.9.8-15
 Section: admin
 Maintainer: Serghey Rodin <skid@vestacp.com>
 Homepage: http://vestacp.com

+ 1 - 1
src/deb/php/control

@@ -1,7 +1,7 @@
 Source: vesta-php
 Package: vesta-php
 Priority: optional
-Version: 0.9.7-3
+Version: 0.9.8-15
 Section: admin
 Maintainer: Serghey Rodin <skid@vestacp.com>
 Homepage: http://vestacp.com

+ 1 - 1
src/deb/vesta/control

@@ -1,7 +1,7 @@
 Source: vesta
 Package: vesta
 Priority: optional
-Version: 0.9.8-14
+Version: 0.9.8-15
 Section: admin
 Maintainer: Serghey Rodin <skid@vestacp.com>
 Homepage: http://vestacp.com

+ 3 - 24
src/deb/vesta/postinst

@@ -1,34 +1,13 @@
 #!/bin/bash
 
-# Run fwd_only trigger
-if [ -x "/usr/local/vesta/upd/add_fwd_only.sh" ]; then
-    /usr/local/vesta/upd/add_fwd_only.sh
-fi
-
-# Run exim permission fixer
-if [ -x "/usr/local/vesta/upd/fix_exim_permissions.sh" ]; then
-    /usr/local/vesta/upd/fix_exim_permissions.sh
-fi
-
-# Run vesta permission fixer
-if [ -x "/usr/local/vesta/upd/fix_vesta_ssl_permissions.sh" ]; then
-    /usr/local/vesta/upd/fix_vesta_ssl_permissions.sh
-fi
-
-# Run MySQL autostart fixed
-if [ -x "/usr/local/vesta/upd/fix_mysql_startup.sh" ]; then
-    /usr/local/vesta/upd/fix_mysql_startup.sh
-fi
-
 # Run SUDO trigger
 if [ -x "/usr/local/vesta/upd/add_sudo.sh" ]; then
     /usr/local/vesta/upd/add_sudo.sh
 fi
 
-# Run Firewall trigger
-if [ -x "/usr/local/vesta/upd/add_firewall.sh" ]; then
-    /usr/local/vesta/upd/add_firewall.sh
+# Run Notification trigger
+if [ -x "/usr/local/vesta/upd/add_notifications.sh" ]; then
+    /usr/local/vesta/upd/add_notifications.sh
 fi
 
-
 exit 0

+ 8 - 5
src/rpm/conf/php-fpm.conf

@@ -490,8 +490,11 @@ env[LANG] = en_US.UTF-8
 
 ; Default Value: nothing is defined by default except the values in php.ini and
 ;                specified at startup with the -d argument
-;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
-;php_flag[display_errors] = off
-;php_admin_value[error_log] = /var/log/fpm-php.www.log
-;php_admin_flag[log_errors] = on
-;php_admin_value[memory_limit] = 32M
+php_flag[display_errors] = off
+php_admin_value[error_log] = /usr/local/vesta/log/fpm-php.log
+php_admin_flag[log_errors] = on
+php_admin_value[memory_limit] = 256M
+php_admin_value[post_max_size] = 512M
+php_admin_value[upload_max_filesize] = 512M
+php_admin_value[max_execution_time] = 600
+php_admin_value[max_input_time] = 600

+ 1 - 1
src/rpm/specs/vesta-nginx.spec

@@ -1,6 +1,6 @@
 Name:           vesta-nginx
 Version:        0.9.8
-Release:        3
+Release:        15
 Summary:        Vesta Control Panel
 Group:          System Environment/Base
 License:        BSD-like

+ 1 - 1
src/rpm/specs/vesta-php.spec

@@ -1,6 +1,6 @@
 Name:           vesta-php
 Version:        0.9.8
-Release:        2
+Release:        15
 Summary:        Vesta Control Panel
 Group:          System Environment/Base
 License:        GPL

+ 29 - 15
src/rpm/specs/vesta.spec

@@ -1,6 +1,6 @@
 Name:           vesta
 Version:        0.9.8
-Release:        14
+Release:        15
 Summary:        Vesta Control Panel
 Group:          System Environment/Base
 License:        GPL
@@ -30,23 +30,11 @@ rm -rf %{buildroot}
 
 %post
 if [ $1 -ge 2 ]; then
-    if [ -e /usr/local/vesta/upd/convert_templates.sh ]; then
-        /usr/local/vesta/upd/convert_templates.sh
-    fi
-    if [ -e /usr/local/vesta/upd/convert_webip.sh ]; then
-        /usr/local/vesta/upd/convert_webip.sh
-    fi
-    if [ -e /usr/local/vesta/upd/add_fwd_only.sh ]; then
-        /usr/local/vesta/upd/add_fwd_only.sh
-    fi
-    if [ -e /usr/local/vesta/upd/fix_vesta_ssl_permissions.sh ]; then
-        /usr/local/vesta/upd/fix_vesta_ssl_permissions.sh
-    fi
     if [ -e /usr/local/vesta/upd/add_sudo.sh ]; then
         /usr/local/vesta/upd/add_sudo.sh
     fi
-    if [ -e /usr/local/vesta/upd/add_firewall.sh ]; then
-        /usr/local/vesta/upd/add_firewall.sh
+    if [ -e /usr/local/vesta/upd/add_notifications.sh ]; then
+        /usr/local/vesta/upd/add_notifications.sh
     fi
 fi
 %files
@@ -62,6 +50,32 @@ fi
 %config(noreplace) %{_vestadir}/web/css/uploadify.css
 
 %changelog
+* Fri Nov 06 2015 Serghey Rodin <builder@vestacp.com> - 0.9.8-15
+- File Manager (commercial plugin)
+- SFTP Chroot (commercial plugin)
+- Monitoring Tools: top/free/df/server-status/mysql-status/etc
+- New installer
+- Improved PHP-FPM support
+- UI: Notification center
+- UI: Starred objects
+- UI: Object sorting
+- UI: HotKeys suport
+- UI: Mail account settings JS hint
+- UI: Autofocus on first input when adding/editing
+- UI: Up to 8 nameserver dns support
+- Core: Improved system logger, domain adding api and backup routine
+- Japanese language support. Thanks to Flatta
+- Polish language support. Thanks to MarPiRK
+- Vietnamese language support. Thanks to Nguyen Ngoc Phuong
+- Security Fix: Command Injection and XSS Thanks to Global IT
+- BugFix: DNS Cluster SOA synchronization
+- BugFix: Bulk Operation
+- BugFix: Backup exclusions
+- BugFix: Domain validation
+- BugFix: FTP user name prefix
+- BugFix: Fail2Ban manager
+- BugFix: Service manager
+
 * Wed Jun 03 2015 Serghey Rodin <builder@vestacp.com> - 0.9.8-13
 - New UI
 - PHP-FPM support

+ 10 - 0
upd/add_notifications.sh

@@ -0,0 +1,10 @@
+#!/bin/bash
+# Add notifications
+
+if [ ! -e '/usr/local/vesta/data/users/admin/notifications.conf' ]; then
+    /usr/local/vesta/bin/v-add-user-notification admin "File Manager" "Browse, coppy, edit, view, and retrieve all of your web domain files using fully featured <a href='http://vestacp.com/features/#filemanager'>File Manager</a>. Plugin is avaiable for <a href='/edit/server/?lead=filemanager#module-filemanager'>purchase</a>." 'filemanager'
+    /usr/local/vesta/bin/v-add-user-notification admin "Chroot SFTP" "If you want have SFTP accounts that will be used only to transfer files (and not to ssh), you can  <a href='/edit/server/?lead=sftp#module-sftp'>purchase</a> and enable <a href='http://vestacp.com/features/#sftpchroot'>SFTP Chroot</a>. "
+    /usr/local/vesta/bin/v-add-user-notification admin "Starred Objects" "Use stars to easily mark certain object as important or to indicate that you need to do something about it later." 'starred'
+    /usr/local/vesta/bin/v-add-user-notification admin "Monitoring Tools" "This module answers common performance, health, usage and monitoring questions. <a href='/list/server/?cpu'> Server -> Show CPU, Memory, Disk usage</a>"
+    /usr/local/vesta/bin/v-add-user-notification admin "Release 0.9.8-15" "New version is cool. A lot of work has been put in the user experience and stability. Check out <a href='http://vestacp.com/roadmap/#0.9.8-15'>release notes</a>"
+fi

+ 13 - 5
upd/add_sudo.sh

@@ -1,10 +1,18 @@
 #!/bin/bash
+# New sudoers format
 
-if [ ! -e /etc/sudoers.d/admin ]; then
-    echo "# Created by vesta update-trigger" > /etc/sudoers.d/admin
-    echo "# $(date)" >> /etc/sudoers.d/admin
-    echo "admin   ALL=(ALL)       ALL" >> /etc/sudoers.d/admin
-    echo "admin   ALL=NOPASSWD:/usr/local/vesta/bin/*" >> /etc/sudoers.d/admin
+if [ ! -e '/etc/sudoers.d/admin' ]; then
+    if [ ! -d '/etc/sudoers.d' ]; then
+        mkidr /etc/sudoers.d
+        chmod 750 /etc/sudoers.d
+    fi
+    echo '# Created by vesta update-trigger' > /etc/sudoers.d/admin
+    echo 'Defaults env_keep="VESTA"' >> /etc/sudoers.d/admin
+    echo 'Defaults:admin !syslog' >> /etc/sudoers.d/admin
+    echo 'Defaults:admin !requiretty' >> /etc/sudoers.d/admin
+    echo '' >> /etc/sudoers.d/admin
+    echo 'admin   ALL=(ALL)       ALL' >> /etc/sudoers.d/admin
+    echo 'admin   ALL=NOPASSWD:/usr/local/vesta/bin/*' >> /etc/sudoers.d/admin
     chmod 440 /etc/sudoers.d/admin
 
     if [ -z "$(grep /etc/sudoers.d /etc/sudoers)" ]; then

+ 1 - 1
web/add/firewall/index.php

@@ -26,7 +26,7 @@ if (!empty($_POST['ok'])) {
     // Check empty fields
     if (empty($_POST['v_action'])) $errors[] = __('action');
     if (empty($_POST['v_protocol'])) $errors[] = __('protocol');
-    if (empty($_POST['v_port'])) $errors[] = __('port');
+    if (!isset($_POST['v_port'])) $errors[] = __('port');
     if (empty($_POST['v_ip'])) $errors[] = __('ip address');
     if (!empty($errors[0])) {
         foreach ($errors as $i => $error) {

+ 0 - 2
web/bulk/web/index.php

@@ -35,12 +35,10 @@ if ($_SESSION['user'] == 'admin') {
 
 foreach ($domain as $value) {
     $value = escapeshellarg($value);
-    echo VESTA_CMD.$cmd." ".$user." ".$value." no";
     exec (VESTA_CMD.$cmd." ".$user." ".$value." no", $output, $return_var);
     $restart='yes';
 }
 
-
 if (isset($restart)) {
     exec (VESTA_CMD."v-restart-web", $output, $return_var);
     exec (VESTA_CMD."v-restart-proxy", $output, $return_var);

+ 6 - 5
web/css/file_manager.css

@@ -3,7 +3,7 @@ body { margin: 0; padding: 0; }
 
 .l-logo {
     background-color: #7B7B7B;
-    background-image: url("/images/sprite.png");
+    background-image: url("/images/sprite.png?1446554103");
     background-position: -117px -57px;
     background-repeat: no-repeat;
     border: 9px solid #7B7B7B;
@@ -111,6 +111,7 @@ ul.listing { list-style-type: none; padding: 18px 0 0; margin: -4px 0 0 -1px;  b
 /* .listing li .icon { background: url("/images/document.png") no-repeat scroll -2px 6px; float: left; margin-left: -17px; width: 13px; height: 24px; }*/
 .listing li .icon { background: url("/images/flat_icons.png") no-repeat scroll  -97px -100px; float: left; margin-left: -17px; width: 31px; height: 31px; margin-top: 1px; }
 .listing li .icon.filetype-dir { background: url("/images/flat_icons.png") no-repeat scroll -24px -98px; }
+.listing li .icon.filetype-link { background: url("/images/flat_icons.png") no-repeat scroll -97px -121px; }
 
 .listing li .icon.filetype-tif,
 .listing li .icon.filetype-gif,
@@ -474,7 +475,7 @@ ul.listing { list-style-type: none; padding: 18px 0 0; margin: -4px 0 0 -1px;  b
 }
 
 .progress-container .progress-elm .close {
-    background: rgba(0, 0, 0, 0) url("/images/sprite.png") repeat scroll -428px -487px;
+    background: rgba(0, 0, 0, 0) url("/images/sprite.png?1446554103") repeat scroll -428px -487px;
     cursor: pointer;
     display: inline-block;
     float: right;
@@ -505,7 +506,7 @@ ul.listing { list-style-type: none; padding: 18px 0 0; margin: -4px 0 0 -1px;  b
 }
 /*W
 .check-label::before {
-    background-image: url("/images/sprite.png");
+    background-image: url("/images/sprite.png?1446554103");
     background-position: -232px -9px;
     background-repeat: no-repeat;
     background-size: 450px auto;
@@ -658,7 +659,7 @@ input[type="checkbox"] {
   line-height: 30px;
 }
 .shortcuts .close {
-  background: url("/images/sprite.png") repeat scroll -408px -469px;
+  background: url("/images/sprite.png?1446554103") repeat scroll -408px -469px;
   cursor: pointer;
   display: inline-block;
   float: right;
@@ -715,7 +716,7 @@ input[type="checkbox"] {
 .l-icon-shortcuts {
   display: inline-block;
   vertical-align: middle;
-  background-image: url("/images/sprite.png");
+  background-image: url("/images/sprite.png?1446554103");
   width: 35px;
   height: 35px;
   background-position: -122px -283px;

+ 2 - 2
web/css/file_manager_editor.css

@@ -28,8 +28,8 @@ input.save:active { border: 1px solid #FFCC00; background-color: #FFCC00; color:
 
 .ace_gutter,
 .ace_scroller { padding-top: 0px; }
-.ace-twilight .ace_gutter-active-line { margin-top: 10px; }
+/*.ace-twilight .ace_gutter-active-line { margin-top: 10px; } */
 
 .ace_gutter-cell { color: #777; }
 
-.ace_editor { font-size: 19px !important; }
+.ace_editor { font-size: 17px !important; font-family: "Courier New", Courier, "Lucida Console", Monaco, monospace !important; }

+ 69 - 48
web/css/styles.min.css

@@ -629,10 +629,11 @@ a {
   left: 0;
   top: 0;
   display: inline-block;
-  background-image: url("/images/sprite.png");
+  background-image: url("/images/sprite.png?1446554103");
   background-size: 450px auto;
   background-repeat: no-repeat;
   background-position: -232px -9px;
+  z-index: 99;
 }
 
 input[type="checkbox"] {
@@ -655,7 +656,7 @@ input[type="checkbox"] {
 }
 
 .l-logo {
-  background-image: url("/images/sprite.png");
+  background-image: url("/images/sprite.png?1446554103");
   background-position: -117px -7px;
   background-repeat: no-repeat;
   display: inline-block;
@@ -672,7 +673,7 @@ input[type="checkbox"] {
   margin-bottom: 28px;
   position: fixed;
   width: 100%;
-  z-index: 11;
+  z-index: 100;
 }
 .l-header a {
   font-size: 12px;
@@ -777,7 +778,7 @@ input[type="checkbox"] {
 }
 
 .l-profile__notifications {
-  background: url("/images/sprite.png") no-repeat scroll -129px -135px;
+  background: url("/images/sprite.png?1446554103") no-repeat scroll -129px -135px;
   border-radius: 30px;
   color: #fff;
   cursor: pointer;
@@ -799,11 +800,6 @@ input[type="checkbox"] {
   background-color: #c4da5e;
 }
 .l-profile__notifications.updates {
-  background-position: -165px -135px;
-}
-
-.l-profile__notifications.updates2 {
-/*  background-position: -202px -135px; */
   background-position: -202px -157px;
 }
 
@@ -817,35 +813,43 @@ input[type="checkbox"] {
   position: fixed;
   top: 34px;
   width: 351px;
-  z-index: 21;
+  z-index: 200;
   font-size: 12px;
   padding: 0;
-  color: #9E9E9E;
+  color: #7f7f7f;
 }
+.notification-container .unseen {
+  color: #ABABAB;
+}
+
+
 .notification-container li {
   border-bottom: 1px solid #555;
   padding: 10px 15px 24px;
 }
 .notification-container .mark-seen {
-  background: rgba(0, 0, 0, 0) url("/images/sprite.png") repeat scroll -427px -486px;
-  border: 5px solid #454545;
-  border-radius: 12px;
+  background-color: #abc04b;
+  border: 2px solid #454545;
+  border-radius: 10px;
   cursor: pointer;
-  display: inline-block;
+  display: none;
   float: right;
-  height: 9px;
-  margin-right: -8px;
-  margin-top: -3px;
-  width: 9px;
+  height: 7px;
+  margin-right: -5px;
+  margin-top: 0;
+  width: 7px;
 }
 .notification-container .mark-seen:hover {
   background-color: #333;
-  border-color: #333;
+  border-color: #abc04b;
 }
 .notification-container .mark-seen:active {
   background-color: #777;
   border-color: #777;
 }
+.notification-container .unseen .mark-seen{
+  display: inline-block;
+}
 .notification-container .title {
   color: #9e9e9e;
   font-weight: bold;
@@ -870,7 +874,6 @@ input[type="checkbox"] {
   color: #dacf2e;
 }
 
-
 .notification-container a {
   color: #5ABDB5;/* #eee;*/
 }
@@ -881,6 +884,21 @@ input[type="checkbox"] {
   color: #00C0C0;
 }
 
+.notification-container .icon {
+  display: inline-block;
+  width: 0;
+}
+.notification-container .icon.filemanager {
+  display: inline-block;
+  width: 22px;
+  background: url("/images/flat_icons.png") repeat scroll -31px -100px;
+}
+.notification-container .icon.starred {
+  display: inline-block;
+  width: 21px;
+  background: url("/images/sprite.png?1446554103") repeat scroll -184px 556px;
+}
+
 
 
 .l-stat {
@@ -889,7 +907,7 @@ input[type="checkbox"] {
   margin: 34px auto;
   position: fixed;
   background-color: #fff;
-  z-index: 10;
+  z-index: 100;
   padding-top: 30px;
 }
 .l-stat__col {
@@ -972,25 +990,25 @@ div.l-content > div.l-separator:nth-of-type(2) {
   margin-top: 214px;
   width: 100%;
   position: fixed;
-  z-index: 20;
+  z-index: 120;
 }
 
 div.l-content > div.l-separator:nth-of-type(4) {
   margin-top: 259px;
   width: 100%;
   position: fixed;
-  z-index: 5;
+  z-index: 100;
 }
 
 .l-sort {
   position: fixed;
   width: 998px;
   background-color: #fff;
-  z-index: 10;
+  z-index: 110;
   margin-top: 215px;
 }
 .l-sort__create-btn {
-  background-image: url("/images/sprite.png");
+  background-image: url("/images/sprite.png?1446554103");
   background-position: -331px -107px;
   background-repeat: no-repeat;
   bottom: -23px;
@@ -1058,7 +1076,7 @@ div.l-content > div.l-separator:nth-of-type(4) {
   padding: 12px;
 }
 .context-menu.sort-order span.name {
-  background: url("/images/sprite.png") no-repeat scroll -292px -361px rgba(0, 0, 0, 0);
+  background: url("/images/sprite.png?1446554103") no-repeat scroll -292px -361px rgba(0, 0, 0, 0);
   display: inline-block;
   padding: 12px 28px 12px 12px;
   width: 117px;
@@ -1066,7 +1084,7 @@ div.l-content > div.l-separator:nth-of-type(4) {
   font-weight: bold;
 }
 .context-menu.sort-order span.up {
-  background: url("/images/sprite.png") no-repeat scroll -434px -417px rgba(0, 0, 0, 0);
+  background: url("/images/sprite.png?1446554103") no-repeat scroll -434px -417px rgba(0, 0, 0, 0);
   display: inline-block;
   padding: 12px 14px;
   width: 16px;
@@ -1152,7 +1170,7 @@ div.l-content > div.l-separator:nth-of-type(4) {
   float: left;
   width: 30px;
   height: 30px;
-  background-image: url("/images/sprite.png");
+  background-image: url("/images/sprite.png?1446554103");
   background-position: -333px -1px;
   border: none;
 }
@@ -1173,7 +1191,7 @@ div.l-content > div.l-separator:nth-of-type(4) {
   float: left;
   width: 25px;
   height: 25px;
-  background-image: url("/images/sprite.png");
+  background-image: url("/images/sprite.png?1446554103");
   background-position: -333px -37px;
   border: none;
 }
@@ -1226,7 +1244,7 @@ div.l-content > div.l-separator:nth-of-type(4) {
 
 .l-select:after {
   pointer-events: none;
-  background-image: url("/images/sprite.png");
+  background-image: url("/images/sprite.png?1446554103");
   background-position: -245px -175px;
   width: 7px;
   height: 4px;
@@ -1261,14 +1279,12 @@ div.l-content > div.l-separator:nth-of-type(4) {
   overflow: hidden;
   font-size: 13px;
 }
-
-.units div:last-child {  
-  border-bottom: none !important;
-}
-
 .units .l-unit {
   border-bottom: 1px solid #ddd;
 }
+.units > div:last-child {
+  border-bottom: none;
+}
 
 
 
@@ -1566,7 +1582,7 @@ div.l-content > div.l-separator:nth-of-type(4) {
   position: relative;
 }
 .actions-panel__col i {
-  background-image: url("/images/sprite.png");
+  background-image: url("/images/sprite.png?1446554103");
   background-repeat: no-repeat;
   display: inline-block;
   float: right;
@@ -1993,7 +2009,7 @@ div.l-content > div.l-separator:nth-of-type(4) {
 .l-icon-up-arrow, .l-icon-down-arrow, .l-icon-star, .l-icon-to-top, .l-icon-shortcuts, .l-icon-star-orange, .l-icon-star-blue {
   display: inline-block;
   vertical-align: middle;
-  background-image: url("/images/sprite.png");
+  background-image: url("/images/sprite.png?1446554103");
 }
 
 .l-icon-down-arrow {
@@ -2233,7 +2249,7 @@ div.l-content > div.l-separator:nth-of-type(4) {
   height: 16px;
   overflow: hidden;
   padding-top: 6px;
-  width: 620px;
+  width: 593px;
 }
 
 .vst-ok {
@@ -2328,7 +2344,7 @@ label {
 
 .vst-input:disabled,
 .vst-list:disabled {
-  background-color: #ebebeb;
+  background-color: #e0e0e0;
 }
 .vst-input:focus:disabled {
   border-color: #f1f1f1;
@@ -2351,7 +2367,7 @@ label {
   margin: 2px 6px 0 0;
   min-width: 138px;
   padding: 8px 1px 6px 10px;
-  background-image: url("/images/sprite.png");
+  background-image: url("/images/sprite.png?1446554103");
   background-position: -185px -604px;
   width: 270px;
   appearance:none;
@@ -2764,7 +2780,7 @@ form#vstobjects.suspended {
 #add-icon {
   width: 45px;
   height: 45px;
-  background-image: url("/images/sprite.png");
+  background-image: url("/images/sprite.png?1446554103");
   background-position: -378px -107px;
   background-repeat: no-repeat;
   display: inline-block;
@@ -2831,13 +2847,14 @@ form#vstobjects.suspended {
 }
 
 .search-input {
+  background-color: #fff;
   border: 1px solid #ddd;
   height: 21px;
   line-height: 28px;
   padding-left: 7px;
   float: left;
-  width: 0px;
-  visibility: hidden;
+  width: 74px;
+/*  visibility: hidden;*/
   -webkit-transition: width .2s ease-out;
   -moz-transition: width .2s ease-out;
   -o-transition: width .2s ease-out;
@@ -2848,9 +2865,9 @@ form#vstobjects.suspended {
   visibility: visible;
 }
 .search-input:focus {
-  background-color: #d7f9ff;
-  border-color: #55c9c0;
-  color: #333;
+//  background-color: #e8fcff;
+//  border-color: #75c9c2;
+//  color: #333;
 }
 
 .float-left {
@@ -2902,7 +2919,7 @@ form#vstobjects.suspended {
   letter-spacing: 3px;
 }
 .shortcuts .close {
-  background: url("/images/sprite.png") repeat scroll -408px -469px;
+  background: url("/images/sprite.png?1446554103") repeat scroll -408px -469px;
   cursor: pointer;
   display: inline-block;
   float: right;
@@ -3001,6 +3018,10 @@ form#vstobjects.suspended {
   background-color: #5f9491;
 }
 
+.description.cancel-success {
+  color: #8fac0a;
+  font-weight: bold;
+}
 
 .description .licence {
   padding: 20px 0;

+ 30 - 0
web/delete/notification/index.php

@@ -0,0 +1,30 @@
+<?php
+// Init
+error_reporting(NULL);
+session_start();
+include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
+
+
+// Check token
+if ((!isset($_GET['token'])) || ($_SESSION['token'] != $_GET['token'])) {
+    header('location: /login/');
+    exit();
+}
+
+
+if($_GET['delete'] == 1){
+    $v_username = escapeshellarg($user);
+    $v_id = escapeshellarg((int)$_GET['notification_id']);
+    exec (VESTA_CMD."v-delete-user-notification ".$v_username." ".$v_id, $output, $return_var);
+    check_return_code($return_var,$output);
+    unset($output);
+} else {
+    $v_username = escapeshellarg($user);
+    $v_id = escapeshellarg((int)$_GET['notification_id']);
+    echo VESTA_CMD."v-acknowledge-user-notification ".$v_username." ".$v_id;
+    exec (VESTA_CMD."v-acknowledge-user-notification ".$v_username." ".$v_id, $output, $return_var);
+    check_return_code($return_var,$output);
+    unset($output);
+}
+
+exit;

+ 17 - 5
web/download/file/index.php

@@ -1,11 +1,23 @@
 <?php
+include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
+
+if ((!isset($_SESSION['FILEMANAGER_KEY'])) || (empty($_SESSION['FILEMANAGER_KEY']))) {
+    header("Location: /login/");
+    exit;
+}
+
+$user = $_SESSION['user'];
+if (($_SESSION['user'] == 'admin') && (!empty($_SESSION['look']))) {
+    $user=$_SESSION['look'];
+}
+
 if (!empty($_REQUEST['path'])) {
     $path = $_REQUEST['path'];
-    if (is_readable($path)) {
-        header("Content-disposition: attachment;filename=".basename($path));
-        readfile($path);
-        exit;
-    }
+    header("Content-type: application/octet-stream");
+    header("Content-Transfer-Encoding: binary");
+    header("Content-disposition: attachment;filename=".basename($path));
+    passthru (VESTA_CMD . "v-open-fs-file " . $user . " " . escapeshellarg($path));
+    exit;
 }
 else {
     die('File not found');

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff