Răsfoiți Sursa

listing scripts refactoring + new format

Serghey Rodin 9 ani în urmă
părinte
comite
6e0ef668bb
60 a modificat fișierele cu 3697 adăugiri și 1993 ștergeri
  1. 53 42
      bin/v-list-backup-host
  2. 61 47
      bin/v-list-cron-job
  3. 69 62
      bin/v-list-cron-jobs
  4. 46 42
      bin/v-list-database
  5. 61 45
      bin/v-list-database-host
  6. 104 19
      bin/v-list-database-hosts
  7. 32 23
      bin/v-list-database-types
  8. 66 11
      bin/v-list-databases
  9. 50 58
      bin/v-list-dns-domain
  10. 71 12
      bin/v-list-dns-domains
  11. 65 59
      bin/v-list-dns-records
  12. 60 57
      bin/v-list-dns-template
  13. 36 22
      bin/v-list-dns-templates
  14. 65 13
      bin/v-list-firewall
  15. 58 11
      bin/v-list-firewall-ban
  16. 44 45
      bin/v-list-firewall-rule
  17. 50 45
      bin/v-list-mail-account
  18. 23 13
      bin/v-list-mail-account-autoreply
  19. 84 13
      bin/v-list-mail-accounts
  20. 53 46
      bin/v-list-mail-domain
  21. 27 17
      bin/v-list-mail-domain-dkim
  22. 32 17
      bin/v-list-mail-domain-dkim-dns
  23. 70 12
      bin/v-list-mail-domains
  24. 66 12
      bin/v-list-remote-dns-hosts
  25. 166 31
      bin/v-list-sys-config
  26. 1 1
      bin/v-list-sys-db-status
  27. 39 24
      bin/v-list-sys-info
  28. 39 24
      bin/v-list-sys-interfaces
  29. 57 50
      bin/v-list-sys-ip
  30. 61 63
      bin/v-list-sys-ips
  31. 30 17
      bin/v-list-sys-languages
  32. 63 18
      bin/v-list-sys-rrd
  33. 160 126
      bin/v-list-sys-services
  34. 30 18
      bin/v-list-sys-shells
  35. 32 20
      bin/v-list-sys-users
  36. 30 13
      bin/v-list-sys-vesta-autoupdate
  37. 57 52
      bin/v-list-sys-vesta-updates
  38. 142 59
      bin/v-list-user
  39. 51 56
      bin/v-list-user-backup
  40. 122 41
      bin/v-list-user-backup-exclusions
  41. 70 11
      bin/v-list-user-backups
  42. 56 44
      bin/v-list-user-favourites
  43. 56 79
      bin/v-list-user-ips
  44. 63 45
      bin/v-list-user-log
  45. 61 46
      bin/v-list-user-notifications
  46. 35 21
      bin/v-list-user-ns
  47. 74 47
      bin/v-list-user-package
  48. 80 51
      bin/v-list-user-packages
  49. 99 16
      bin/v-list-user-stats
  50. 143 69
      bin/v-list-users
  51. 99 14
      bin/v-list-users-stats
  52. 87 52
      bin/v-list-web-domain
  53. 24 12
      bin/v-list-web-domain-accesslog
  54. 24 12
      bin/v-list-web-domain-errorlog
  55. 79 14
      bin/v-list-web-domain-ssl
  56. 83 16
      bin/v-list-web-domains
  57. 37 23
      bin/v-list-web-stats
  58. 31 19
      bin/v-list-web-templates
  59. 35 23
      bin/v-list-web-templates-backend
  60. 35 23
      bin/v-list-web-templates-proxy

+ 53 - 42
bin/v-list-backup-host

@@ -1,6 +1,6 @@
 #!/bin/bash
 # info: list backup host
-# options: TYPE [FORMAT]
+# options: TYPE HOST [FORMAT]
 #
 # The function for obtaining the list of backup host parameters.
 
@@ -10,46 +10,55 @@
 #----------------------------------------------------------#
 
 # Argument definition
-TYPE=$1
+type=$1
 format=${2-shell}
 
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_ftp_host() {
-    i=1
-    fileds_count=$(echo "$fields" | wc -w)
-    ip_data=$(cat $VESTA/conf/$TYPE.backup.conf)
+# JSON list function
+json_list() {
     echo '{'
-    echo -e "\t\"$TYPE\": {"
-    eval $ip_data
-    for field in $fields; do
-        eval value=$field
-        if [ $fileds_count -eq $i ]; then
-            echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
-        else
-            echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
-        fi
-    (( ++i))
-    done
-    if [ -n "$value" ]; then
-        echo -e '        }'
-    fi
-    echo -e '}'
+    echo '    "'$type'": {
+        "HOST": "'$HOST'",
+        "USERNAME": "'$USERNAME'",
+        "PORT": "'$PORT'",
+        "TYPE": "'$type'",
+        "BPATH": "'$BPATH'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+    echo '}'
+}
+
+# SHELL list function
+shell_list() {
+    echo "HOST:           $HOST"
+    echo "USERNAME:       $USERNAME"
+    echo "PORT:           $PORT"
+    echo "TYPE:           $type"
+    echo "PATH:           $BPATH"
+    echo "TIME:           $TIME"
+    echo "DATE:           $DATE"
+}
+
+# PLAIN list function
+plain_list() {
+    echo -e "$HOST\t$USERNAME\t$PORT\t$type\t$BPATH\t$TIME\t$DATE"
+}
+
+# CSV list function
+csv_list() {
+    echo "HOST,USERNAME,PORT,TYPE,PATH,TIME,DATE"
+    echo "$HOST,$USERNAME,$PORT,$type,$BPATH,$TIME,$DATE"
 }
 
-# Shell function
-shell_list_ftp_host() {
-    line=$(cat $VESTA/conf/$TYPE.backup.conf)
-    eval $line
-    for field in $fields; do
-        eval key="$field"
-        if [ -z "$key" ]; then
-            key='NULL'
-        fi
-        echo "${field//$/}: $key "
-    done
+# Type format validator
+is_type_format_valid() {
+    exclude="[!|#|$|^|&|(|)|+|=|{|}|:|@|<|>|?|/|\|\"|'|;|%|\`| ]|\."
+    if [[ "$1" =~ $exclude ]]; then
+        check_result $E_INVALID "invalid type extention format :: $1"
+    fi
 }
 
 
@@ -58,25 +67,27 @@ shell_list_ftp_host() {
 #----------------------------------------------------------#
 
 check_args '1' "$#" 'TYPE [FORMAT]'
+is_type_format_valid "$type"
 
 
 #----------------------------------------------------------#
 #                       Action                             #
 #----------------------------------------------------------#
 
-if [ ! -e "$VESTA/conf/$TYPE.backup.conf" ]; then
+# Checking backup config
+if [ ! -e "$VESTA/conf/$type.backup.conf" ]; then
     exit
 fi
 
-# Defining fileds to select
-fields='$HOST $USERNAME $PORT $TYPE $BPATH $TIME $DATE'
+# Parsing backup config
+source "$VESTA/conf/$type.backup.conf"
 
-# Listing database
-case $format in 
-    json)   json_list_ftp_host ;;
-    plain)  nohead=1; shell_list_ftp_host;;
-    shell)  shell_list_ftp_host | column -t ;;
-    *)      check_args '2' '0' '[FORMAT]'
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t ;;
 esac
 
 

+ 61 - 47
bin/v-list-cron-job

@@ -2,7 +2,7 @@
 # info: list cron job
 # options: USER JOB [FORMAT]
 #
-# The function of obtaining cron job settings.
+# The function of obtaining cron job parameters.
 
 
 #----------------------------------------------------------#
@@ -17,44 +17,46 @@ format=${3-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_job() {
-    i=1
-    fileds_count=$(echo "$fields" | wc -w)
-    line=$(grep "JOB='$job'" $conf)
-    echo '{'
-    eval $line
-    for field in $fields; do
-        eval value=$field
-        value=$(echo "$value"|sed -e 's/"/\\"/g' -e "s/%quote%/'/g")
-        if [ "$i" -eq 1 ]; then
-            echo -e "\t\"$value\": {"
-        else
-            if [ "$fileds_count" -eq "$i" ]; then
-                echo -e "\t\t\"${field//$/}\": \"$value\""
-            else
-                echo -e "\t\t\"${field//$/}\": \"$value\","
-            fi
-        fi
-        (( ++i))
-    done
-    if [ -n "$value" ]; then
-        echo -e '        }'
-    fi
-    echo -e "}"
+# JSON list function
+json_list() {
+    echo "{"
+    echo -n '    "'$job'": {
+        "MIN": "'$MIN'",
+        "HOUR": "'$HOUR'",
+        "DAY": "'$HOUR'",
+        "MONTH": "'$MONTH'",
+        "WDAY": "'$WDAY'",
+        "CMD": "'$CMD'",
+        "JOB": "'$JOB'",
+        "SUSPENDED": "'$SUSPENDED'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+    echo
+    echo '}'
 }
 
-# Shell function
-shell_list_job() {
-    line=$(grep "JOB='$job'" $conf)
-    eval $line
-    for field in $fields; do
-        eval key="$field"
-        if [ -z "$key" ]; then
-            key=NULL
-        fi
-        echo "${field//$/}: $key "
-    done
+# SHELL list function
+shell_list() {
+    echo "MINUTE:         $MIN"
+    echo "HOUR:           $HOUR"
+    echo "DAY:            $DAY"
+    echo "DAY OF WEEK:    $WDAY"
+    echo "COMMAND:        $CMD"
+    echo "SUSPENDED:      $SUSPENDED"
+    echo "TIME:           $TIME"
+    echo "DATE:           $DATE"
+}
+
+# PLAIN list function
+plain_list() {
+    echo -e  "$MIN\t$HOUR\t$DAY\t$WDAY\t$CMD\t$SUSPENDED\t$TIME\t$DATE"
+}
+
+# CSV list function
+csv_list() {
+    echo  "MIN,HOUR,DAY,WDAY,CMD,SUSPENDED,TIME,DATE"
+    echo  "$MIN,$HOUR,$DAY,$WDAY,\"$CMD\",$SUSPENDED,$TIME,$DATE'"
 }
 
 
@@ -63,6 +65,8 @@ shell_list_job() {
 #----------------------------------------------------------#
 
 check_args '2' "$#" 'USER JOB [FORMAT]'
+is_format_valid 'user'
+is_number_format_valid  "$job" "job_id"
 is_object_valid 'user' 'USER' "$user"
 
 
@@ -70,17 +74,27 @@ is_object_valid 'user' 'USER' "$user"
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining config and fields to select
+# Defining config
 conf=$USER_DATA/cron.conf
-fields="\$JOB \$MIN \$HOUR \$DAY \$MONTH \$WDAY \$CMD \$SUSPENDED"
-fields="$fields \$TIME \$DATE"
-
-# Listing domains
-case $format in 
-    json)   json_list_job ;;
-    plain)  nohead=1; shell_list_job ;;
-    shell)  shell_list_job |column -t ;;
-    *)      check_args '2' '0' 'USER JOB [FORMAT]'
+
+# Checking job id
+cron_line=$(grep "JOB='$job'" $conf)
+if [ -z "$cron_line" ]; then
+    check_result $E_NOTEXIST "cron job $job doesn't exist"
+fi
+
+# Parsing cron job
+eval $cron_line
+
+# Replacing quoted and backslahed text
+CMD=$(echo "$CMD" |sed -e 's/"/\\"/g' -e "s/%quote%/'/g")
+
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 69 - 62
bin/v-list-cron-jobs

@@ -16,53 +16,71 @@ format=${2-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json list function
-json_list_cron() {
-    echo '{'
-    fileds_count=$(echo $fields| wc -w )
-    while read line; do
-        eval $line
-        if [ -n "$data" ]; then
-            echo -e '        },'
+# JSON list function
+json_list() {
+    IFS=$'\n'
+    i=1
+    objects=$(grep JOB $USER_DATA/cron.conf |wc -l)
+    echo "{"
+    while read str; do
+        eval $str
+        CMD=$(echo "$CMD" |sed -e 's/"/\\"/g' -e "s/%quote%/'/g")
+        echo -n '    "'$JOB'": {
+        "MIN": "'$MIN'",
+        "HOUR": "'$HOUR'",
+        "DAY": "'$DAY'",
+        "MONTH": "'$MONTH'",
+        "WDAY": "'$WDAY'",
+        "CMD": "'$CMD'",
+        "JOB": "'$JOB'",
+        "SUSPENDED": "'$SUSPENDED'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
+        else
+            echo
         fi
-        i=1
-        IFS=' '
-        for field in $fields; do
-            eval value=\"$field\"
-            value=$(echo "$value"|sed -e 's/"/\\"/g' -e "s/%quote%/'/g")
-            if [ $i -eq 1 ]; then
-                (( ++i))
-                echo -e "\t\"$value\": {"
-            else
-                if [ $i -lt $fileds_count ]; then
-                    (( ++i))
-                    echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
-                else
-                    echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
-                    data=1
-                fi
-            fi
-        done
-    done < $conf
-    if [ -n "$data" ]; then
-        echo -e '        }'
-    fi
-    echo -e '}'
+        ((i++))
+    done < <(cat $USER_DATA/cron.conf)
+    echo '}'
 }
 
-# Shell list function
-shell_list_cron() {
-    if [ -z "$nohead" ] ; then
-        echo "${fields//$/}"
-        for a in $fields; do
-            echo -e "------ \c"
-        done
-        echo
-    fi
-    while read line ; do
-        eval $line
-        eval echo "$fields" | sed -e "s/%quote%/'/g"
-    done < $conf
+
+# SHELL list function
+shell_list() {
+    IFS=$'\n'
+    echo "JOB^MIN^HOUR^MONTH^WDAY^COMMAND"
+    echo "---^---^----^-----^----^-------"
+    while read str; do
+        eval $str
+        CMD=$(echo "$CMD" |sed -e 's/"/\\"/g' -e "s/%quote%/'/g")
+        echo "$JOB^$MIN^$HOUR^$MONTH^$WDAY^$CMD"
+    done < <(cat $USER_DATA/cron.conf)
+}
+
+# PLAIN list function
+plain_list() {
+    IFS=$'\n'
+    while read str; do
+        eval $str
+        CMD=$(echo "$CMD" |sed -e 's/"/\\"/g' -e "s/%quote%/'/g")
+        echo -ne "$JOB\t$MIN\t$HOUR\t$MONTH\t$WDAY\t$CMD\t"
+        echo -e "$SUSPENDED\t$TIME\t$DATE"
+    done < <(cat $USER_DATA/cron.conf)
+}
+
+# CSV list function
+csv_list() {
+    IFS=$'\n'
+    echo  "MIN,HOUR,DAY,WDAY,CMD,SUSPENDED,TIME,DATE"
+    while read str; do
+        eval $str
+        CMD=$(echo "$CMD" |sed -e 's/"/\\"/g' -e "s/%quote%/'/g")
+        echo -n "$JOB,$MIN,$HOUR,$MONTH,$WDAY,\"$CMD\","
+        echo "$SUSPENDED,$TIME,$DATE"
+    done < <(cat $USER_DATA/cron.conf)
 }
 
 
@@ -71,7 +89,7 @@ shell_list_cron() {
 #----------------------------------------------------------#
 
 check_args '1' "$#" 'USER [FORMAT]'
-validate_format 'user'
+is_format_valid 'user'
 is_object_valid 'user' 'USER' "$user"
 
 
@@ -79,23 +97,12 @@ is_object_valid 'user' 'USER' "$user"
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining config
-conf=$USER_DATA/cron.conf
-
-# Defining fileds to select
-fields='$JOB $MIN $HOUR $DAY $MONTH $WDAY $CMD $JOB $SUSPENDED $TIME $DATE'
-
-# Listing domains
-case $format in 
-    json)   json_list_cron ;;
-    plain)  nohead=1;
-            fields="\"\$JOB\" \"\$SUSPENDED\" \"\$MIN\" \"\$HOUR\" \"\$DAY\""
-            fields="$fields \"\$MONTH\" \"\$WDAY\" \"\$CMD\" ";
-            fields="$fields \"\$TIME\" \"\$DATE\""
-            shell_list_cron ;;
-    shell)  fields='$JOB~$SUSPENDED~$MIN~$HOUR~$DAY~$MONTH~$WDAY~$CMD';
-            shell_list_cron |column -t -s '~';;
-    *)      check_args '1' '0' 'USER [FORMAT]' ;;
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t -s '^';;
 esac
 
 

+ 46 - 42
bin/v-list-database

@@ -17,40 +17,46 @@ format=${3-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_db() {
-    i=1
-    last_word=$(echo "$fields" | wc -w)
-    line=$(grep "DB='$database'" $conf)
+# JSON list function
+json_list() {
     echo '{'
-    eval $line
-    for field in $fields; do
-        eval value=$field
-        if [ "$i" -eq 1 ]; then
-            echo -e "\t\"$value\": {"
-        else
-            if [ "$last_word" -eq "$i" ]; then
-                echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
-            else
-                echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
-            fi
-        fi
-        (( ++i))
-    done
-    if [ -n "$value" ]; then
-        echo -e "\t}"
-    fi
-    echo -e '}'
+    echo '    "'$database'": {
+        "DATABASE": "'$DB'",
+        "DBUSER": "'$DBUSER'",
+        "HOST": "'$HOST'",
+        "TYPE": "'$TYPE'",
+        "CHARSET": "'$CHARSET'",
+        "U_DISK": "'$U_DISK'",
+        "SUSPENDED": "'$SUSPENDED'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+    echo '}'
 }
 
-# Shell list for single database
-shell_list_db() {
-    line=$(grep "DB='$database'" $conf)
-    eval $line
-    for field in $fields; do
-        eval key="$field"
-        echo "${field//$/}: $key "
-    done
+# SHELL list function
+shell_list() {
+    echo "DATABASE:       $DB"
+    echo "DB USER:        $DBUSER"
+    echo "HOST:           $HOST"
+    echo "TYPE:           $TYPE"
+    echo "CHARSET:        $CHARSET"
+    echo "DISK:           $U_DISK"
+    echo "SUSPENDED:      $SUSPENDED"
+    echo "TIME:           $TIME"
+    echo "DATE:           $DATE"
+}
+
+# PLAIN list function
+plain_list() {
+    echo -ne "$DB\t$DBUSER\t$HOST\t$TYPE\t$CHARSET\t$U_DISK\t"
+    echo -e "$SUSPENDED\t$TIME\t$DATE"
+}
+
+# CSV list function
+csv_list() {
+    echo "DATABASE,DBUSER,HOST,TYPE,CHARSET,U_DISK,SUSPENDED,TIME,DATE"
+    echo "$DB,$DBUSER,$HOST,$TYPE,$CHARSET,$U_DISK,$SUSPENDED,$TIME,$DATE"
 }
 
 
@@ -59,7 +65,7 @@ shell_list_db() {
 #----------------------------------------------------------#
 
 check_args '2' "$#" 'USER DATABASE [FORMAT]'
-validate_format 'user' 'database'
+is_format_valid 'user' 'database'
 is_object_valid 'user' 'USER' "$user"
 is_object_valid 'db' 'DB' "$database"
 
@@ -68,17 +74,15 @@ is_object_valid 'db' 'DB' "$database"
 #                       Action                             #
 #----------------------------------------------------------#
 
+# Parsing database
+eval $(grep "DB='$database'" $USER_DATA/db.conf)
 
-# Defining fileds to select
-conf=$USER_DATA/db.conf
-fields='$DB $DBUSER $HOST $TYPE $CHARSET $U_DISK $SUSPENDED $TIME $DATE'
-
-# Listing database
-case $format in 
-    json)   json_list_db ;;
-    plain)  shell_list_db ;;
-    shell)  shell_list_db | column -t ;;
-    *)      check_args '2' '0' 'USER DATABASE [FORMAT]'
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 61 - 45
bin/v-list-database-host

@@ -1,8 +1,8 @@
 #!/bin/bash
-# info: list database server
+# info: list database host
 # options: TYPE HOST [FORMAT]
 #
-# The function for obtaining database server parameters.
+# The function for obtaining database host parameters.
 
 
 #----------------------------------------------------------#
@@ -17,40 +17,58 @@ format=${3-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_dbhost() {
-    i=1
-    fields_count=$(echo "$fields" | wc -w)
-    line=$(grep "HOST='$host'" $conf)
+# JSON list function
+json_list() {
     echo '{'
-    eval $line
-    for field in $fields; do
-        eval value=$field
-        if [ "$i" -eq 1 ]; then
-            echo -e "\t\"$value\": {"
-        else
-            if [ "$fields_count" -eq "$i" ]; then
-                echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
-            else
-                echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
-            fi
-        fi
-        (( ++i))
-    done
-    if [ -n "$value" ]; then
-        echo -e "\t}"
-    fi
-    echo -e "}"
+    echo '    "'$HOST'": {
+        "HOST": "'$HOST'",
+        "TYPE": "'$type'",
+        "CHARSETS": "'$CHARSETS'",
+        "MAX_DB": "'$MAX_DB'",
+        "U_SYS_USERS": "'$U_SYS_USERS'",
+        "U_DB_BASES": "'$U_DB_BASES'",
+        "TPL": "'$TPL'",
+        "SUSPENDED": "'$SUSPENDED'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+    echo '}'
 }
 
-# Shell function
-shell_list_dbhost() {
-    line=$(grep "HOST='$host'" $conf)
-    eval $line
-    for field in $fields; do
-        eval key="$field"
-        echo "${field//$/}: $key"
-    done
+# SHELL list function
+shell_list() {
+    echo "HOST:           $HOST"
+    echo "TYPE:           $type"
+    echo "CHARSETS:       $CHARSETS"
+    echo "MAX_DB:         $MAX_DB"
+    echo "U_DB_BASES:     $U_DB_BASES"
+    echo "U_SYS_USERS:    $U_SYS_USERS"
+    echo "TPL:            $TPL"
+    echo "SUSPENDED:      $SUSPENDED"
+    echo "TIME:           $TIME"
+    echo "DATE:           $DATE"
+}
+
+# PLAIN list function
+plain_list() {
+    echo -ne "$HOST\t$type\t$CHARSETS\t$MAX_DB\t$U_SYS_USERS\t"
+    echo -e "$U_DB_BASES\t$TPL\t$SUSPENDED\t$TIME\t$DATE"
+}
+
+# CSV list function
+csv_list() {
+    echo -n "HOST,TYPE,CHARSETS,MAX_DB,U_SYS_USERS,"
+    echo "U_DB_BASES,TPL,SUSPENDED,TIME,DATE'"
+    echo -n "$HOST,$type,\"$CHARSETS\",$MAX_DB,\"$U_SYS_USERS\","
+    echo "$U_DB_BASES,$TPL,$SUSPENDED,$TIME,$DATE"
+}
+
+# Type format validator
+is_type_format_valid() {
+    exclude="[!|#|$|^|&|(|)|+|=|{|}|:|@|<|>|?|/|\|\"|'|;|%|\`| ]|\."
+    if [[ "$1" =~ $exclude ]]; then
+        check_result $E_INVALID "invalid type extention format :: $1"
+    fi
 }
 
 
@@ -59,7 +77,7 @@ shell_list_dbhost() {
 #----------------------------------------------------------#
 
 check_args '2' "$#" 'TYPE HOST [FORMAT]'
-validate_format 'host'
+is_type_format_valid "$type"
 is_object_valid "../../conf/$type" 'HOST' "$host"
 
 
@@ -67,17 +85,15 @@ is_object_valid "../../conf/$type" 'HOST' "$host"
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining fileds to select
-conf=$VESTA/conf/$type.conf
-fields='$HOST $CHARSETS $MAX_DB $U_SYS_USERS $U_DB_BASES $TPL $SUSPENDED'
-fields="$fields \$TIME \$DATE"
-
-# Listing database
-case $format in 
-    json)   json_list_dbhost ;;
-    plain)  nohead=1; shell_list_dbhost ;;
-    shell)  shell_list_dbhost | column -t;;
-    *)      check_args '2' '0' 'TYPE HOST [FORMAT]'
+# Parsing hosts
+eval $(grep "HOST='$host'" $VESTA/conf/$type.conf)
+
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t ;;
 esac
 
 

+ 104 - 19
bin/v-list-database-hosts

@@ -1,8 +1,8 @@
 #!/bin/bash
-# info: list database servers
-# options: TYPE [FORMAT]
+# info: list database hosts
+# options: [FORMAT]
 #
-# The function for obtaining the list of all hosts of the same databases' type.
+# The function for obtaining the list of all configured database hosts.
 
 
 #----------------------------------------------------------#
@@ -10,37 +10,122 @@
 #----------------------------------------------------------#
 
 # Argument definition
-type=${1-mysql}
-format=${2-shell}
+format=${1-shell}
 
 # Includes
 source $VESTA/func/main.sh
+source $VESTA/conf/vesta.conf
+
+# JSON list function
+json_list() {
+    IFS=$'\n'
+    i=1
+    objects=0
+    for type in $(echo $DB_SYSTEM |sed -e 's/,/\n/'); do
+        if [ -e "$VESTA/conf/$type.conf" ]; then
+            db_hosts=$(grep HOST $VESTA/conf/$type.conf |wc -l)
+            objects=$((objects + db_hosts))
+        fi
+    done
+
+    echo "{"
+    for type in $(echo $DB_SYSTEM |sed -e 's/,/\n/'); do
+        if [ -e "$VESTA/conf/$type.conf" ]; then
+            for str in $(cat $VESTA/conf/$type.conf); do
+                eval $str
+        echo -n '    "'$HOST'": {
+        "HOST": "'$HOST'",
+        "TYPE": "'$type'",
+        "CHARSETS": "'$CHARSETS'",
+        "MAX_DB": "'$MAX_DB'",
+        "U_SYS_USERS": "'$U_SYS_USERS'",
+        "U_DB_BASES": "'$U_DB_BASES'",
+        "TPL": "'$TPL'",
+        "SUSPENDED": "'$SUSPENDED'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+                if [ "$i" -lt "$objects" ]; then
+                    echo ','
+                else
+                    echo
+                fi
+                ((i++))
+            done
+        fi
+    done
+    echo '}'
+}
+
+# SHELL list function
+shell_list() {
+    IFS=$'\n'
+    echo "HOST   TYPE   MAX_DB   DB_USED   SPND   TIME   DATE"
+    echo "----   ----   ------   -------   ----   ----   ----"
+    for type in $(echo $DB_SYSTEM |sed -e 's/,/\n/'); do
+        if [ -e "$VESTA/conf/$type.conf" ]; then
+            for str in $(cat $VESTA/conf/$type.conf); do
+                eval $str
+                echo "$HOST $type $MAX_DB $U_DB_BASES $SUSPENDED $TIME $DATE"
+            done
+        fi
+    done
+}
+
+# PLAIN list function
+plain_list() {
+    IFS=$'\n'
+    for type in $(echo $DB_SYSTEM |sed -e 's/,/\n/'); do
+        if [ -e "$VESTA/conf/$type.conf" ]; then
+            for str in $(cat $VESTA/conf/$type.conf); do
+                eval $str
+                echo -ne "$HOST\t$type\t$CHARSETS\t$MAX_DB\t$U_SYS_USERS\t"
+                echo -e "$U_DB_BASES\t$TPL\t$SUSPENDED\t$TIME\t$DATE"
+            done
+        fi
+    done
+}
+
+# CSV list function
+csv_list() {
+    IFS=$'\n'
+    echo -n "HOST,TYPE,CHARSETS,MAX_DB,U_SYS_USERS,"
+    echo "U_DB_BASES,TPL,SUSPENDED,TIME,DATE"
+    for type in $(echo $DB_SYSTEM |sed -e 's/,/\n/'); do
+        if [ -e "$VESTA/conf/$type.conf" ]; then
+            for str in $(cat $VESTA/conf/$type.conf); do
+                eval $str
+                echo -n "$HOST,$type,\"$CHARSETS\",$MAX_DB,\"$U_SYS_USERS\","
+                echo "$U_DB_BASES,$TPL,$SUSPENDED,$TIME,$DATE"
+            done
+        fi
+    done
+}
+
+# Type format validator
+is_type_format_valid() {
+    exclude="[!|#|$|^|&|(|)|+|=|{|}|:|@|<|>|?|/|\|\"|'|;|%|\`| ]|\."
+    if [[ "$1" =~ $exclude ]]; then
+        check_result $E_INVALID "invalid type extention format :: $1"
+    fi
+}
 
 
 #----------------------------------------------------------#
 #                    Verifications                         #
 #----------------------------------------------------------#
 
-# Checking args
-#check_args '1' "$#" 'TYPE [FORMAT]'
-
 
 #----------------------------------------------------------#
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining fileds to select
-conf=$VESTA/conf/$type.conf
-fields='$HOST $CHARSETS $MAX_DB $U_SYS_USERS $U_DB_BASES $TPL $SUSPENDED'
-fields="$fields \$TIME \$DATE"
-
-# Listing database
-case $format in 
+# Listing data
+case $format in
     json)   json_list ;;
-    plain)  nohead=1; shell_list;;
-    shell)  fields='$HOST $MAX_DB $U_DB_BASES $SUSPENDED $DATE';
-            shell_list | column -t ;;
-    *)      check_args '2' '0' 'TYPE [FORMAT]'
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t ;;
 esac
 
 

+ 32 - 23
bin/v-list-database-types

@@ -16,31 +16,40 @@ format=${1-shell}
 source $VESTA/func/main.sh
 source $VESTA/conf/vesta.conf
 
-# Json function
-json_list_dbtypes() {
-    types=$(echo "${DB_SYSTEM//,/ }")
-    t_counter=$(echo "$types" | wc -w)
+# JSON list function
+json_list() {
+    objects=$(echo "${DB_SYSTEM//,/ }" |wc -w)
     i=1
     echo '['
-    for type in $types; do
-        if [ "$i" -lt "$t_counter" ]; then
-            echo -e  "\t\"$type\","
+    for type in ${DB_SYSTEM//,/ }; do
+        echo -n '    "'$type'"'
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
         else
-            echo -e  "\t\"$type\""
+            echo
         fi
-        (( ++i))
+        ((i++))
     done
     echo "]"
 }
 
-# Shell function
-shell_list_dbtypes() {
-    types=$(echo "${DB_SYSTEM//,/ }")
-    if [ -z "$nohead" ]; then
-        echo "TYPES"
-        echo "----------"
-    fi
-    for type in $types; do
+# SHELL list function
+shell_list() {
+    echo -e "TYPE\n----"
+    echo "$DB_SYSTEM" |sed -e "s/,/\n/"
+}
+
+# PLAIN list function
+plain_list() {
+    for type in ${DB_SYSTEM//,/ }; do
+        echo "$type"
+    done
+}
+
+# CSV list function
+csv_list() {
+    echo "TYPE"
+    for type in ${DB_SYSTEM//,/ }; do
         echo "$type"
     done
 }
@@ -50,12 +59,12 @@ shell_list_dbtypes() {
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Listing domains
-case $format in 
-    json)   json_list_dbtypes ;;
-    plain)  nohead=1; shell_list_dbtypes ;;
-    shell)  shell_list_dbtypes ;;
-    *)      check_args '1' '0' '[FORMAT]' ;;
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list;;
 esac
 
 

+ 66 - 11
bin/v-list-databases

@@ -16,13 +16,73 @@ format=${2-shell}
 # Includes
 source $VESTA/func/main.sh
 
+# JSON list function
+json_list() {
+    IFS=$'\n'
+    i=1
+    objects=$(grep "DB=" $USER_DATA/db.conf |wc -l)
+    echo "{"
+    while read str; do
+        eval $str
+        echo -n '    "'$DB'": {
+        "DATABASE": "'$DB'",
+        "DBUSER": "'$DBUSER'",
+        "HOST": "'$HOST'",
+        "TYPE": "'$TYPE'",
+        "CHARSET": "'$CHARSET'",
+        "U_DISK": "'$U_DISK'",
+        "SUSPENDED": "'$SUSPENDED'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
+        else
+            echo
+        fi
+        ((i++))
+    done < <(cat $USER_DATA/db.conf)
+    echo '}'
+}
+
+# SHELL list function
+shell_list() {
+    IFS=$'\n'
+    echo "DATABASE   USER   HOST   TYPE   DISK   SPND   DATE"
+    echo "--------   ----   ----   ----   ----   ----   ----"
+    while read str; do
+        eval $str
+        echo "$DB $DBUSER $HOST $TYPE $U_DISK $SUSPENDED $DATE"
+    done < <(cat $USER_DATA/db.conf)
+}
+
+# PLAIN list function
+plain_list() {
+    IFS=$'\n'
+    while read str; do
+        eval $str
+        echo -ne "$DB\t$DBUSER\t$HOST\t$TYPE\t$CHARSET\t$U_DISK\t"
+        echo -e "$SUSPENDED\t$TIME\t$DATE"
+    done < <(cat $USER_DATA/db.conf)
+}
+
+# CSV list function
+csv_list() {
+    IFS=$'\n'
+    echo "DATABASE,DBUSER,HOST,TYPE,CHARSET,U_DISK,SUSPENDED,TIME,DATE"
+    while read str; do
+        eval $str
+        echo "$DB,$DBUSER,$HOST,$TYPE,$CHARSET,$U_DISK,$SUSPENDED,$TIME,$DATE"
+    done < <(cat $USER_DATA/db.conf)
+}
+
 
 #----------------------------------------------------------#
 #                    Verifications                         #
 #----------------------------------------------------------#
 
 check_args '1' "$#" 'USER [FORMAT]'
-validate_format 'user'
+is_format_valid 'user'
 is_object_valid 'user' 'USER' "$user"
 
 
@@ -30,17 +90,12 @@ is_object_valid 'user' 'USER' "$user"
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining fileds to select
-conf=$USER_DATA/db.conf
-fields='$DB $DBUSER $HOST $TYPE $CHARSET $U_DISK $SUSPENDED $TIME $DATE'
-
-# Listing databases
-case $format in 
+# Listing data
+case $format in
     json)   json_list ;;
-    plain)  nohead=1; shell_list ;;
-    shell)  fields='$DB $DBUSER $HOST $TYPE $U_DISK $DATE';
-            shell_list | column -t ;;
-    *)      check_args '1' '0' 'USER [FORMAT]'
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t ;;
 esac
 
 

+ 50 - 58
bin/v-list-dns-domain

@@ -2,8 +2,7 @@
 # info: list dns domain
 # options: USER DOMAIN [FORMAT]
 #
-# The function of obtaining the list of domain parameters. This call, just as
-# all v_list_* calls, supports 3 formats - json, shell and plain.
+# The function of obtaining the list of dns domain parameters.
 
 
 #----------------------------------------------------------#
@@ -18,57 +17,52 @@ format=${3-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_domain() {
-    i=1
-    fileds_count=$(echo "$fields" | wc -w)
-    line=$(grep "DOMAIN='$domain'" $conf)
-
-    # Print top bracket
+# JSON list function
+json_list() {
     echo '{'
+    echo '    "'$DOMAIN'": {
+        "IP": "'$IP'",
+        "TPL": "'$TPL'",
+        "TTL": "'$TTL'",
+        "EXP": "'$EXP'",
+        "SOA": "'$SOA'",
+        "SERIAL": "'$SERIAL'",
+        "SRC": "'$SRC'",
+        "RECORDS": "'$RECORDS'",
+        "SUSPENDED": "'$SUSPENDED'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+    echo '}'
+}
 
-    # Assing key=value
-    eval $line
-
-    # Starting output loop
-    for field in $fields; do
-        # Parsing key=value
-        eval value=$field
-
-        # Checking first field
-        if [ "$i" -eq 1 ]; then
-            echo -e "\t\"$value\": {"
-        else
-            if [ "$fileds_count" -eq "$i" ]; then
-                echo -e "\t\t\"${field//$/}\": \"$value\""
-            else
-                echo -e "\t\t\"${field//$/}\": \"$value\","
-            fi
-        fi
-        # Updating iterator
-        (( ++i))
-    done
-
-    # If there was any output
-    if [ -n "$value" ]; then
-        echo -e '        }'
-    fi
-    # Printing bottom json bracket
-    echo -e "}"
+# SHELL list function
+shell_list() {
+    echo "DOMAIN:         $DOMAIN"
+    echo "IP:             $IP"
+    echo "TEMPLATE:       $TPL"
+    echo "TTL:            $TTL"
+    echo "EXP:            $EXP"
+    echo "SOA:            $SOA"
+    echo "SERIAL:         $SERIAL"
+    echo "RECORDS:        $RECORDS"
+    echo "SUSPENDED:      $SUSPENDED"
+    echo "TIME:           $TIME"
+    echo "DATE:           $DATE"
 }
 
-# Shell function
-shell_list_domain() {
-    line=$(grep "DOMAIN='$domain'" $conf)
 
-    # Parsing key=value
-    eval $line
+# PLAIN list function
+plain_list() {
+    echo -ne "$DOMAIN\t$IP\t$TPL\t$TTL\t$EXP\t$SOA\t$SERIAL\t$RECORDS\t"
+    echo -e "$SUSPENDED\t$TIME\t$DATE"
+}
 
-    # Print result line
-    for field in $fields; do
-        eval key="$field"
-        echo "${field//$/}: $key "
-    done
+# CSV list function
+csv_list() {
+    echo "DOMAIN,IP,TPL,TTL,EXP,SOA,SERIAL,RECORDS,SUSPENDED,TIME,DATE"
+    echo -n "$DOMAIN,$IP,$TPL,$TTL,$EXP,$SOA,$SERIAL,$RECORDS,$SUSPENDED,"
+    echo "$TIME,$DATE"
 }
 
 
@@ -85,17 +79,15 @@ is_object_valid 'dns' 'DOMAIN' "$domain"
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining config and fields to select
-conf=$USER_DATA/dns.conf
-fields='$DOMAIN $IP $TPL $TTL $EXP $SOA $SERIAL $SRC $RECORDS
-    $SUSPENDED $TIME $DATE'
-
-# Listing domains
-case $format in 
-    json)   json_list_domain ;;
-    plain)  nohead=1; shell_list_domain ;;
-    shell)  shell_list_domain |column -t ;;
-    *)      check_args '2' '0' 'USER DOMAIN [FORMAT]'
+# Parsing domain
+eval $(grep "DOMAIN='$domain'" $USER_DATA/dns.conf)
+
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 71 - 12
bin/v-list-dns-domains

@@ -16,13 +16,78 @@ format=${2-shell}
 # Includes
 source $VESTA/func/main.sh
 
+# JSON list function
+json_list() {
+    IFS=$'\n'
+    i=1
+    objects=$(grep DOMAIN $USER_DATA/dns.conf |wc -l)
+    echo "{"
+    while read str; do
+        eval $str
+        echo -n '    "'$DOMAIN'": {
+        "IP": "'$IP'",
+        "TPL": "'$TPL'",
+        "TTL": "'$TTL'",
+        "EXP": "'$EXP'",
+        "SOA": "'$SOA'",
+        "SERIAL": "'$SERIAL'",
+        "SRC": "'$SRC'",
+        "RECORDS": "'$RECORDS'",
+        "SUSPENDED": "'$SUSPENDED'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
+        else
+            echo
+        fi
+        ((i++))
+    done < <(cat $USER_DATA/dns.conf)
+    echo '}'
+}
+
+# SHELL list function
+shell_list() {
+    IFS=$'\n'
+    echo "DOMAIN   IP   TPL   TTL   REC   SPND   DATE"
+    echo "------   --   ---   ---   ---   ----   ----"
+    while read str; do
+        eval $str
+        echo "$DOMAIN $IP $TPL $TTL $RECORDS $SUSPENDED $DATE"
+    done < <(cat $USER_DATA/dns.conf)
+}
+
+
+# PLAIN list function
+plain_list() {
+    IFS=$'\n'
+    while read str; do
+        eval $str
+        echo -ne "$DOMAIN\t$IP\t$TPL\t$TTL\t$EXP\t$SOA\t$SERIAL\t"
+        echo -e "$SRC\t$RECORDS\t$SUSPENDED\t$TIME\t$DATE"
+    done < <(cat $USER_DATA/dns.conf)
+}
+
+
+# CSV list function
+csv_list() {
+    IFS=$'\n'
+    echo "DOMAIN,IP,TPL,TTL,EXP,SOA,SERIAL,SRC,RECORDS,SUSPENDED,TIME,DATE"
+    while read str; do
+        eval $str
+        echo -n "$DOMAIN,$IP,$TPL,$TTL,$EXP,$SOA,$SERIAL,"
+        echo "$SRC,$RECORDS,$SUSPENDED,$TIME,$DATE"
+    done < <(cat $USER_DATA/dns.conf)
+}
+
 
 #----------------------------------------------------------#
 #                    Verifications                         #
 #----------------------------------------------------------#
 
 check_args '1' "$#" 'USER [FORMAT]'
-validate_format 'user'
+is_format_valid 'user'
 is_object_valid 'user' 'USER' "$user"
 
 
@@ -30,18 +95,12 @@ is_object_valid 'user' 'USER' "$user"
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining config and fields
-conf=$USER_DATA/dns.conf
-fields='$DOMAIN $IP $TPL $TTL $EXP $SOA $SERIAL $SRC $RECORDS
-    $SUSPENDED $TIME $DATE'
-
-# Listing domains
-case $format in 
+# Listing data
+case $format in
     json)   json_list ;;
-    plain)  nohead=1; shell_list ;;
-    shell)  fields='$DOMAIN $IP $TPL $EXP $DATE';
-            shell_list| column -t ;;
-    *)      check_args '1' '0' 'USER [FORMAT]';;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t ;;
 esac
 
 

+ 65 - 59
bin/v-list-dns-records

@@ -17,56 +17,67 @@ format=${3-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json func
-json_list_dns() {
-    echo '{'
-    fileds_count=$(echo $fields| wc -w )
-    while read line; do
-        IFS=$'\n'
-        eval $line
-        if [ -n "$data" ]; then
-            echo -e '        },'
+# JSON list function
+json_list() {
+    IFS=$'\n'
+    i=1
+    objects=$(grep ID $USER_DATA/dns/$domain.conf |wc -l)
+    echo "{"
+    while read str; do
+        eval $str
+        VALUE=$(echo "$VALUE" |sed -e 's/"/\\"/g' -e "s/%quote%/'/g")
+        echo -n '    "'$ID'": {
+        "RECORD": "'$RECORD'",
+        "TYPE": "'$TYPE'",
+        "PRIORITY": "'$PRIORITY'",
+        "VALUE": "'$VALUE'",
+        "ID": "'$ID'",
+        "SUSPENDED": "'$SUSPENDED'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
+        else
+            echo
         fi
-        i=1
-        IFS=' '
-        for field in $fields; do
-            eval value=\"$field\"
-            value=$(echo "$value" | sed -e 's/"/\\"/g' -e "s/%quote%/'/g")
-            if [ $i -eq 1 ]; then
-                (( ++i))
-                echo -e "\t\"$value\": {"
-            else
-                if [ $i -lt $fileds_count ]; then
-                    (( ++i))
-                    echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
-                else
-                    echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
-                    data=1
-                fi
-            fi
-        done
-    done < $conf
-    if [ -n "$data" ]; then
-        echo -e '        }'
-    fi
-    echo -e '}'
+        ((i++))
+    done < <(cat $USER_DATA/dns/$domain.conf)
+    echo '}'
 }
 
-# Shell function
-shell_list_dns() {
-
-    if [ -z "$nohead" ] ; then
-        echo "${fields//$/}"
-        for a in $fields; do
-            echo -e "------ \c"
-        done
-        echo
-    fi
-    while read line ; do
-        IFS=$'\n'
-        eval $line
-        eval echo "$fields" | sed "s/%quote%/'/g"
-    done < $conf
+# SHELL list function
+shell_list() {
+    IFS=$'\n'
+    echo "ID^RECORD^TYPE^VALUE^DATE"
+    echo "--^------^----^-----^----"
+    while read str; do
+        eval $str
+        echo "$ID^$RECORD^$TYPE^${VALUE:0:30}^$DATE"
+    done < <(cat $USER_DATA/dns/$domain.conf)
+}
+
+# PLAIN list function
+plain_list() {
+    IFS=$'\n'
+    while read str; do
+        eval $str
+        VALUE=$(echo "$VALUE" |sed -e "s/%quote%/\\'/g")
+        echo -ne "$ID\t$RECORD\t$TYPE\t$PRIORITY\t$VALUE\t"
+        echo -e "$SUSPENDED\t$TIME\t$DATE"
+    done < <(cat $USER_DATA/dns/$domain.conf)
+}
+
+# CSV list function
+csv_list() {
+    IFS=$'\n'
+    echo "ID,RECORD,TYPE,PRIORITY,VALUE,SUSPENDED,TIME,DATE"
+    while read str; do
+        eval $str
+        VALUE=$(echo "$VALUE" |sed -e "s/%quote%/\\'/g")
+        echo -n "$ID,$RECORD,$TYPE,$PRIORITY,\"$VALUE\","
+        echo "$SUSPENDED,$TIME,$DATE"
+    done < <(cat $USER_DATA/dns/$domain.conf)
 }
 
 
@@ -75,7 +86,7 @@ shell_list_dns() {
 #----------------------------------------------------------#
 
 check_args '2' "$#" 'USER DOMAIN [FORMAT]'
-validate_format 'user' 'domain'
+is_format_valid 'user' 'domain'
 is_object_valid 'user' 'USER' "$user"
 is_object_valid 'dns' 'DOMAIN' "$domain"
 
@@ -84,17 +95,12 @@ is_object_valid 'dns' 'DOMAIN' "$domain"
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining config and fields
-conf=$USER_DATA/dns/$domain.conf
-fields='$ID $RECORD $TYPE $PRIORITY $VALUE $ID $SUSPENDED $TIME $DATE'
-
-# Listing domains
-case $format in 
-    json)   json_list_dns ;;
-    plain)  nohead=1; shell_list_dns ;;
-    shell)  fields='$ID $RECORD $TYPE $VALUE';
-            shell_list_dns | column -t ;;
-    *)      check_args '2' '0' 'USER DOMAIN [FORMAT]'
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t -s '^';;
 esac
 
 

+ 60 - 57
bin/v-list-dns-template

@@ -17,55 +17,62 @@ format=${2-shell}
 source $VESTA/func/main.sh
 source $VESTA/func/domain.sh
 
-# Json func
-json_list_dns() {
-    echo '{'
-    fileds_count=$(echo $fields| wc -w )
-    while read line; do
-        IFS=$'\n'
-        eval $line
-        if [ -n "$data" ]; then
-            echo -e '        },'
+# JSON list function
+json_list() {
+    IFS=$'\n'
+    i=1
+    objects=$(grep ID $DNSTPL/$template.tpl |wc -l)
+    echo "{"
+    while read str; do
+        eval $str
+        VALUE=$(echo "$VALUE" |sed -e 's/"/\\"/g' -e "s/%quote%/'/g")
+        echo -n '    "'$ID'": {
+        "RECORD": "'$RECORD'",
+        "TYPE": "'$TYPE'",
+        "PRIORITY": "'$PRIORITY'",
+        "VALUE": "'$VALUE'",
+        "ID": "'$ID'"
+    }'
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
+        else
+            echo
         fi
-        i=1
-        IFS=' '
-        for field in $fields; do
-            eval value=\"$field\"
-            value=$(echo "$value" | sed -e 's/"/\\"/g' -e "s/%quote%/'/g")
-            if [ $i -eq 1 ]; then
-                (( ++i))
-                echo -e "\t\"$value\": {"
-            else
-                if [ $i -lt $fileds_count ]; then
-                    (( ++i))
-                    echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
-                else
-                    echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
-                    data=1
-                fi
-            fi
-        done
-    done < $conf
-    if [ -n "$data" ]; then
-        echo -e '        }'
-    fi
-    echo -e '}'
+        ((i++))
+    done < <(cat $DNSTPL/$template.tpl)
+    echo '}'
 }
 
-# Shell function
-shell_list_dns() {
-    if [ -z "$nohead" ] ; then
-        echo "${fields//$/}"
-        for a in $fields; do
-            echo -e "------ \c"
-        done
-        echo
-    fi
-
-    while read line ; do
-        eval $line
-        eval echo "$fields" | sed "s/%quote%/'/g"
-    done < $conf
+# SHELL list function
+shell_list() {
+    IFS=$'\n'
+    echo "ID^RECORD^TYPE^VALUE"
+    echo "--^------^----^-----"
+    while read str; do
+        eval $str
+        echo "$ID^$RECORD^$TYPE^$VALUE"
+    done < <(cat $DNSTPL/$template.tpl)
+}
+
+# PLAIN list function
+plain_list() {
+    IFS=$'\n'
+    while read str; do
+        eval $str
+        VALUE=$(echo "$VALUE" |sed -e "s/%quote%/\\'/g")
+        echo -e "$ID\t$RECORD\t$TYPE\t$PRIORITY\t$VALUE"
+    done < <(cat $DNSTPL/$template.tpl)
+}
+
+# CSV list function
+csv_list() {
+    IFS=$'\n'
+    echo "ID,RECORD,TYPE,PRIORITY,VALUE"
+    while read str; do
+        eval $str
+        VALUE=$(echo "$VALUE" |sed -e "s/%quote%/\\'/g")
+        echo "$ID,$RECORD,$TYPE,$PRIORITY,\"$VALUE\""
+    done < <(cat $DNSTPL/$template.tpl)
 }
 
 
@@ -74,7 +81,7 @@ shell_list_dns() {
 #----------------------------------------------------------#
 
 check_args '1' "$#" 'TEMPLATE [FORMAT]'
-validate_format 'template'
+is_format_valid 'template'
 is_dns_template_valid
 
 
@@ -82,16 +89,12 @@ is_dns_template_valid
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining config and fields
-conf=$DNSTPL/$template.tpl
-fields='$RECORD $TYPE $PRIORITY $VALUE'
-
-# Listing templates
-case $format in 
-    json)   json_list_dns ;;
-    plain)  nohead=1; shell_list_dns ;;
-    shell)  shell_list_dns | column -t ;;
-    *)      check_args '1' '0' 'TEMPLATE [FORMAT]';;
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t -s '^';;
 esac
 
 

+ 36 - 22
bin/v-list-dns-templates

@@ -15,30 +15,41 @@ format=${1-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_dnstpl() {
-    templates=$(ls -t $DNSTPL |grep '\.tpl' |cut -f 1 -d  '.')
-    t_counter=$(echo "$templates" | wc -w)
+# JSON list function
+json_list() {
+    objects=$(echo "$templates" |wc -l)
     i=1
-    echo '['
+    echo "["
     for template in $templates; do
-        if [ "$i" -lt "$t_counter" ]; then
-            echo -e  "\t\"$template\","
+        echo -n '    "'$template'"'
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
         else
-            echo -e  "\t\"$template\""
+            echo
         fi
-        (( ++i))
+        ((i++))
     done
     echo "]"
+
+}
+
+# SHELL list function
+shell_list() {
+    echo "TEMPLATE"
+    echo "--------"
+    ls -t $DNSTPL |grep '\.tpl' |cut -f 1 -d  '.'
 }
 
-# Shell function
-shell_list_dnstpl() {
-    templates=$(ls -t $DNSTPL |grep '\.tpl' |cut -f 1 -d  '.')
-    if [ -z "$nohead" ]; then
-        echo "Templates"
-        echo "----------"
-    fi
+# PLAIN list function
+plain_list() {
+    for template in $templates; do
+        echo "$template"
+    done
+}
+
+# CSV list function
+csv_list() {
+    echo "TEMPLATE"
     for template in $templates; do
         echo "$template"
     done
@@ -49,12 +60,15 @@ shell_list_dnstpl() {
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Listing domains
-case $format in 
-    json)   json_list_dnstpl;;
-    plain)  nohead=1; shell_list_dnstpl ;;
-    shell)  shell_list_dnstpl ;;
-    *)      check_args '1' '0' '[FORMAT] [LIMIT] [OFFSET]';;
+# Defining template list
+templates=$(ls -t $DNSTPL |grep '\.tpl' |cut -f 1 -d  '.')
+
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list;;
 esac
 
 

+ 65 - 13
bin/v-list-firewall

@@ -15,25 +15,77 @@ format=${1-shell}
 # Includes
 source $VESTA/func/main.sh
 
+# JSON list function
+json_list() {
+    IFS=$'\n'
+    i=1
+    objects=$(grep RULE $VESTA/data/firewall/rules.conf |wc -l)
+    echo "{"
+    while read str; do
+        eval $str
+        echo -n '    "'$RULE'": {
+        "ACTION": "'$ACTION'",
+        "PROTOCOL": "'$PROTOCOL'",
+        "PORT": "'$PORT'",
+        "IP": "'$IP'",
+        "COMMENT": "'$COMMENT'",
+        "SUSPENDED": "'$SUSPENDED'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
+        else
+            echo
+        fi
+        ((i++))
+    done < <(cat $VESTA/data/firewall/rules.conf)
+    echo '}'
+}
+
+# SHELL list function
+shell_list() {
+    IFS=$'\n'
+    echo "RULE^ACTION^PROTO^PORT^IP^SPND^DATE"
+    echo "----^------^-----^----^--^----^----"
+    while read str; do
+        eval $str
+        echo "$RULE^$ACTION^$PROTOCOL^$PORT^$IP^$SUSPENDED^$DATE"
+    done < <(cat $VESTA/data/firewall/rules.conf)
+}
+
+# PLAIN list function
+plain_list() {
+    IFS=$'\n'
+    while read str; do
+        eval $str
+        echo -ne "$RULE\t$ACTION\t$PROTOCOL\t$PORT\t$IP\t$COMMENT\t"
+        echo -e "$SUSPENDED\t$TIME\t$DATE"
+    done < <(cat $VESTA/data/firewall/rules.conf)
+}
+
+# CSV list function
+csv_list() {
+    IFS=$'\n'
+    echo "RULE,ACTION,PROTOCOL,PORT,IP,COMMENT,SUSPENDED,TIME,DATE"
+    while read str; do
+        eval $str
+        echo -n "$RULE,$ACTION,$PROTOCOL,$PORT,$IP,\"$COMMENT\","
+        echo "$SUSPENDED,$TIME,$DATE"
+    done < <(cat $VESTA/data/firewall/rules.conf)
+}
+
 
 #----------------------------------------------------------#
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining config
-conf=$VESTA/data/firewall/rules.conf
-
-# Defining fileds to select
-fields="\$RULE \$ACTION \$PROTOCOL \$PORT \$IP \$COMMENT"
-fields="$fields \$RULE \$SUSPENDED \$TIME \$DATE"
-
-# Listing domains
-case $format in 
+# Listing data
+case $format in
     json)   json_list ;;
-    plain)  nohead=1; shell_list ;;
-    shell)  fields="\$ACTION \$PROTOCOL \$PORT \$IP";
-            shell_list | column -t ;;
-    *)      check_args '1' '0' 'USER [FORMAT]'
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t -s '^' ;;
 esac
 
 

+ 58 - 11
bin/v-list-firewall-ban

@@ -15,24 +15,71 @@ format=${1-shell}
 # Includes
 source $VESTA/func/main.sh
 
+# JSON list function
+json_list() {
+    IFS=$'\n'
+    i=1
+    objects=$(grep IP $VESTA/data/firewall/banlist.conf |wc -l)
+    echo "{"
+    while read str; do
+        eval $str
+        echo -n '    "'$IP'": {
+        "IP": "'$IP'",
+        "CHAIN": "'$COMMENT'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
+        else
+            echo
+        fi
+        ((i++))
+    done < <(cat $VESTA/data/firewall/banlist.conf)
+    echo '}'
+}
+
+# SHELL list function
+shell_list() {
+    IFS=$'\n'
+    echo "IP   CHAIN   TIME   DATE"
+    echo "--   -----   ----   ----"
+    while read str; do
+        eval $str
+        echo "$IP $CHAIN $TIME $DATE"
+    done < <(cat $VESTA/data/firewall/banlist.conf)
+}
+
+# PLAIN list function
+plain_list() {
+    IFS=$'\n'
+    while read str; do
+        eval $str
+        echo -e "$IP\t$CHAIN\t$TIME\t$DATE"
+    done < <(cat $VESTA/data/firewall/banlist.conf)
+}
+
+# CSV list function
+csv_list() {
+    IFS=$'\n'
+    echo "IP,CHAIN,TIME,DATE"
+    while read str; do
+        eval $str
+        echo "$IP,$CHAIN,$TIME,$DATE"
+    done < <(cat $VESTA/data/firewall/banlist.conf)
+}
+
 
 #----------------------------------------------------------#
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining config
-conf=$VESTA/data/firewall/banlist.conf
-
-# Defining fileds to select
-fields="\$IP:\$CHAIN \$TIME \$DATE"
-
-# Listing domains
+# Listing data
 case $format in
     json)   json_list ;;
-    plain)  nohead=1; shell_list ;;
-    shell)  fields='$IP $CHAIN $TIME $DATE';
-            shell_list | column -t ;;
-    *)      check_args '1' '0' 'USER [FORMAT]'
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t ;;
 esac
 
 

+ 44 - 45
bin/v-list-firewall-rule

@@ -16,43 +16,43 @@ format=${2-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_fw_rule() {
-    i=1
-    fileds_count=$(echo "$fields" | wc -w)
-    line=$(grep "RULE='$rule'" $conf)
+json_list() {
     echo '{'
-    eval $line
-    for field in $fields; do
-        eval value=$field
-        if [ "$i" -eq 1 ]; then
-            echo -e "\t\"$value\": {"
-        else
-            if [ "$fileds_count" -eq "$i" ]; then
-                echo -e "\t\t\"${field//$/}\": \"$value\""
-            else
-                echo -e "\t\t\"${field//$/}\": \"$value\","
-            fi
-        fi
-        (( ++i))
-    done
-    if [ -n "$value" ]; then
-        echo -e '        }'
-    fi
-    echo -e "}"
+    echo '    "'$RULE'": {
+        "ACTION": "'$ACTION'",
+        "PROTOCOL": "'$PROTOCOL'",
+        "PORT": "'$PORT'",
+        "IP": "'$IP'",
+        "COMMENT": "'$COMMENT'",
+        "SUSPENDED": "'$SUSPENDED'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+    echo '}'
 }
 
-# Shell function
-shell_list_fw_rule() {
-    line=$(grep "RULE='$rule'" $conf)
-    eval $line
-    for field in $fields; do
-        eval key="$field"
-        if [ -z "$key" ]; then
-            key=NULL
-        fi
-        echo "${field//$/}: $key "
-    done
+# SHELL list function
+shell_list() {
+    echo "ACTION:         $ACTION"
+    echo "PROTOCOL:       $PROTOCOL"
+    echo "PORT:           $PORT"
+    echo "IP:             $IP"
+    echo "COMMENT:        $COMMENT"
+    echo "SUSPENDED:      $SUSPENDED"
+    echo "TIME:           $TIME"
+    echo "DATE:           $DATE"
+}
+
+# PLAIN list function
+plain_list() {
+    echo -ne "$RULE\t$ACTION\t$PROTOCOL\t$PORT\t$IP\t$COMMENT\t"
+    echo -e "$SUSPENDED\t$TIME\t$DATE"
+}
+
+# CSV list function
+csv_list() {
+    echo "RULE,ACTION,PROTOCOL,PORT,IP,COMMENT,SUSPENDED,TIME,DATE"
+    echo "$RULE,$ACTION,$PROTOCOL,$PORT,$IP,$COMMENT,$SUSPENDED,$TIME,$DATE"
 }
 
 
@@ -61,6 +61,7 @@ shell_list_fw_rule() {
 #----------------------------------------------------------#
 
 check_args '1' "$#" 'RULE [FORMAT]'
+is_number_format_valid "$rule" "rule id"
 is_object_valid '../../data/firewall/rules' 'RULE' "$rule"
 
 
@@ -68,17 +69,15 @@ is_object_valid '../../data/firewall/rules' 'RULE' "$rule"
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining config and fields to select
-conf=$VESTA/data/firewall/rules.conf
-fields="\$RULE \$ACTION \$PROTOCOL \$PORT \$IP \$COMMENT"
-fields="$fields \$RULE \$SUSPENDED \$TIME \$DATE"
-
-# Listing fw rule
-case $format in 
-    json)   json_list_fw_rule ;;
-    plain)  nohead=1; shell_list_fw_rule ;;
-    shell)  shell_list_fw_rule |column -t ;;
-    *)      check_args '2' '0' 'RULE [FORMAT]'
+# Parsing rules
+eval $(grep "RULE='$rule'" $VESTA/data/firewall/rules.conf)
+
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 50 - 45
bin/v-list-mail-account

@@ -18,43 +18,49 @@ format=${4-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_account() {
-    i=1
-    fileds_count=$(echo "$fields" | wc -w)
-    line=$(grep "ACCOUNT='$account'" $conf)
+# JSON list function
+json_list() {
     echo '{'
-    eval $line
-    for field in $fields; do
-        eval value=$field
-        if [ "$i" -eq 1 ]; then
-            echo -e "\t\"$value\": {"
-        else
-            if [ "$fileds_count" -eq "$i" ]; then
-                echo -e "\t\t\"${field//$/}\": \"$value\""
-            else
-                echo -e "\t\t\"${field//$/}\": \"$value\","
-            fi
-        fi
-        (( ++i))
-    done
-    if [ -n "$value" ]; then
-        echo -e '        }'
-    fi
-    echo -e "}"
+    echo '    "'$account'": {
+        "ALIAS": "'$ALIAS'",
+        "FWD": "'$FWD'",
+        "FWD_ONLY": "'$FWD_ONLY'",
+        "AUTOREPLY": "'$AUTOREPLY'",
+        "QUOTA": "'$QUOTA'",
+        "U_DISK": "'$U_DISK'",
+        "SUSPENDED": "'$SUSPENDED'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+    echo '}'
 }
 
-# Shell function
-shell_list_account() {
-    line=$(grep "ACCOUNT='$account'" $conf)
-    eval $line
-    for field in $fields; do
-        eval key="$field"
-        if [ -z "$key" ]; then
-            key=NULL
-        fi
-        echo "${field//$/}: $key "
-    done
+# SHELL list function
+shell_list() {
+    echo "ACCOUNT:        $account"
+    echo "ALIAS:          $ALIAS"
+    echo "FORWARD:        $FWD"
+    echo "FORWARD_ONLY:   $FWD_ONLY"
+    echo "AUTOREPLY:      $AUTOREPLY"
+    echo "QUOTA:          $QUOTA"
+    echo "DISK:           $U_DISK"
+    echo "SUSPENDED:      $SUSPENDED"
+    echo "TIME:           $TIME"
+    echo "DATE:           $DATE"
+}
+
+# PLAIN list function
+plain_list() {
+    echo -ne "$account\t$ALIAS\t$FWD\t$FWD_ONLY\t$AUTOREPLY\t$QUOTA\t"
+    echo -e "$U_DISK\t$SUSPENDED\t$TIME\t$DATE"
+}
+
+# CSV list function
+csv_list() {
+    echo -n  "ACCOUNT,ALIAS,FWD,FWD_ONLY,AUTOREPLY,QUOTA,U_DISK"
+    echo "SUSPENDED,TIME,DATE"
+    echo -n "$ACCOUNT,\"$ALIAS\",\"$FWD\",$FWD_ONLY,$AUTOREPLY,$QUOTA,"
+    echo "$U_DISK,$SUSPENDED,$TIME,$DATE"
 }
 
 
@@ -63,6 +69,7 @@ shell_list_account() {
 #----------------------------------------------------------#
 
 check_args '3' "$#" 'USER DOMAIN ACCOUNT [FORMAT]'
+is_format_valid 'user' 'domain' 'account'
 is_object_valid 'user' 'USER' "$user"
 is_object_valid 'mail' 'DOMAIN' "$domain"
 is_object_valid "mail/$domain" 'ACCOUNT' "$account"
@@ -73,17 +80,15 @@ is_object_valid "mail/$domain" 'ACCOUNT' "$account"
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining config and fields to select
-conf=$USER_DATA/mail/$domain.conf
-fields="\$ACCOUNT \$ALIAS \$FWD \$FWD_ONLY \$QUOTA \$AUTOREPLY \$U_DISK"
-fields="$fields \$SUSPENDED \$TIME \$DATE"
-
-# Listing domains
-case $format in 
-    json)   json_list_account ;;
-    plain)  nohead=1; shell_list_account ;;
-    shell)  shell_list_account |column -t ;;
-    *)      check_args '2' '0' 'USER DOMAIN ACCOUNT [FORMAT]'
+# Parsing mail account
+eval $(grep "ACCOUNT='$account'" $USER_DATA/mail/$domain.conf)
+
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 23 - 13
bin/v-list-mail-account-autoreply

@@ -18,8 +18,8 @@ format=${4-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_msg() {
+# JSON list function
+json_list() {
     i='1'       # iterator
     echo '{'
     echo -e "\t\"$account\": {"
@@ -27,11 +27,20 @@ json_list_msg() {
     echo -e "\t}\n}"
 }
 
-# Shell function
-shell_list_msg() {
-    if [ ! -z "$msg" ]; then
-        echo -e "$msg"
-    fi
+# SHELL list function
+shell_list() {
+    echo "$msg"
+}
+
+# PLAIN list function
+plain_list() {
+    echo "$msg"
+}
+
+# CSV list function
+csv_list() {
+    echo "MSG"
+    echo "$msg"
 }
 
 
@@ -39,7 +48,8 @@ shell_list_msg() {
 #                    Verifications                         #
 #----------------------------------------------------------#
 
-check_args '2' "$#" 'USER DOMAIN [FORMAT]'
+check_args '3' "$#" 'USER DOMAIN ACCOUNT [FORMAT]'
+is_format_valid 'user' 'domain' 'account'
 is_object_valid 'user' 'USER' "$user"
 is_object_valid 'mail' 'DOMAIN' "$domain"
 is_object_unsuspended 'mail' 'DOMAIN' "$domain"
@@ -56,12 +66,12 @@ if [ -e "$USER_DATA/mail/$account@$domain.msg" ]; then
         sed ':a;N;$!ba;s/\n/\\n/g' )
 fi
 
-# Listing domains
+# Listing data
 case $format in
-    json)   json_list_msg ;;
-    plain)  nohead=1; shell_list_msg ;;
-    shell)  shell_list_msg ;;
-    *)      check_args '1' '0' '[FORMAT]'
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 84 - 13
bin/v-list-mail-accounts

@@ -17,13 +17,90 @@ format=${3-shell}
 # Includes
 source $VESTA/func/main.sh
 
+# JSON list function
+json_list() {
+    IFS=$'\n'
+    i=1
+    objects=$(grep ACCOUNT $USER_DATA/mail/$domain.conf |wc -l)
+    echo "{"
+    while read str; do
+        eval $str
+        echo -n '    "'$ACCOUNT'": {
+        "ALIAS": "'$ALIAS'",
+        "FWD": "'$FWD'",
+        "FWD_ONLY": "'$FWD_ONLY'",
+        "AUTOREPLY": "'$AUTOREPLY'",
+        "QUOTA": "'$QUOTA'",
+        "U_DISK": "'$U_DISK'",
+        "SUSPENDED": "'$SUSPENDED'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
+        else
+            echo
+        fi
+        ((i++))
+    done < <(cat $USER_DATA/mail/$domain.conf)
+    echo '}'
+}
+
+# SHELL list function
+shell_list() {
+    IFS=$'\n'
+    echo "ACCOUNT   ALIAS   FWD   DISK  DATE"
+    echo "-------   -----   ---   ----  ----"
+    while read str; do
+        eval $str
+        if [ -z "$ALIAS" ]; then
+            ALIAS='no'
+        else
+            if [ "${#ALIAS}" -gt 12 ]; then
+                ALIAS="${ALIAS:0:12}..."
+            fi
+        fi
+        if [ -z "$FWD" ]; then
+            FWD='no'
+        else
+            if [ "${#FWD}" -gt 20 ]; then
+                FWD="${FWD:0:20}..."
+            fi
+        fi
+        echo "$ACCOUNT $ALIAS $FWD $U_DISK $DATE"
+    done < <(cat $USER_DATA/mail/$domain.conf)
+}
+
+
+# PLAIN list function
+plain_list() {
+    IFS=$'\n'
+    while read str; do
+        eval $str
+        echo -ne "$ACCOUNT\t$ALIAS\t$FWD\t$FWD_ONLY\t$AUTOREPLY\t"
+        echo -e "$QUOTA\t$U_DISK\t$SUSPENDED\t$TIME\t$DATE"
+    done < <(cat $USER_DATA/mail/$domain.conf)
+}
+
+# CSV list function
+csv_list() {
+    IFS=$'\n'
+    echo -n "ACCOUNT,ALIAS,FWD,FWD_ONLY,AUTOREPLY,QUOTA,U_DISK,"
+    echo "SUSPENDED,TIME,DATE"
+    while read str; do
+        eval $str
+        echo -n "$ACCOUNT,\"$ALIAS\",\"$FWD\",$FWD_ONLY,$AUTOREPLY,"
+        echo "$QUOTA,$U_DISK,$SUSPENDED,$TIME,$DATE"
+    done < <(cat $USER_DATA/mail/$domain.conf)
+}
+
 
 #----------------------------------------------------------#
 #                    Verifications                         #
 #----------------------------------------------------------#
 
 check_args '2' "$#" 'USER DOMAIN [FORMAT]'
-validate_format 'user' 'domain'
+is_format_valid 'user' 'domain'
 is_object_valid 'user' 'USER' "$user"
 is_object_valid 'mail' 'DOMAIN' "$domain"
 
@@ -32,18 +109,12 @@ is_object_valid 'mail' 'DOMAIN' "$domain"
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining fileds to select
-conf=$USER_DATA/mail/$domain.conf
-fields="\$ACCOUNT \$ALIAS \$FWD \$FWD_ONLY \$QUOTA \$AUTOREPLY \$U_DISK"
-fields="$fields \$SUSPENDED \$TIME \$DATE"
-
-# Listing domain accounts
-case $format in 
-    json)  json_list ;;
-    plain) nohead=1; shell_list ;;
-    shell) fields='$ACCOUNT $AUTOREPLY $QUOTA $U_DISK $SUSPENDED $TIME $DATE';
-           shell_list | column -t ;;
-    *)     check_args '1' '0' 'USER [FORMAT]'
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t ;;
 esac
 
 

+ 53 - 46
bin/v-list-mail-domain

@@ -1,9 +1,8 @@
 #!/bin/bash
-# info: list web domain
+# info: list mail domain
 # options: USER DOMAIN [FORMAT]
 #
-# The function of obtaining the list of domain parameters. This call, just as
-# all v_list_* calls, supports 3 formats - json, shell and plain.
+# The function of obtaining the list of domain parameters.
 
 
 #----------------------------------------------------------#
@@ -18,41 +17,50 @@ format=${3-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_domain() {
-    i=1
-    fileds_count=$(echo "$fields" | wc -w)
-    line=$(grep "DOMAIN='$domain'" $conf)
+# JSON list function
+json_list() {
+    eval $(grep "DOMAIN='$domain'" $USER_DATA/mail.conf)
     echo '{'
-    eval $line
-    for field in $fields; do
-        eval value=$field
-        if [ "$i" -eq 1 ]; then
-            echo -e "\t\"$value\": {"
-        else
-            if [ "$fileds_count" -eq "$i" ]; then
-                echo -e "\t\t\"${field//$/}\": \"$value\""
-            else
-                echo -e "\t\t\"${field//$/}\": \"$value\","
-            fi
-        fi
-        (( ++i))
-    done
-
-    if [ -n "$value" ]; then
-        echo -e '        }'
-    fi
-    echo -e "}"
+    echo '    "'$DOMAIN'": {
+        "ANTIVIRUS": "'$ANTIVIRUS'",
+        "ANTISPAM": "'$ANTISPAM'",
+        "DKIM": "'$DKIM'",
+        "CATCHALL": "'$CATCHALL'",
+        "ACCOUNTS": "'$ACCOUNTS'",
+        "U_DISKL": "'$U_DISK'",
+        "SUSPENDED": "'$SUSPENDED'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+    echo '}'
 }
 
-# Shell function
-shell_list_domain() {
-    line=$(grep "DOMAIN='$domain'" $conf)
-    eval $line
-    for field in $fields; do
-        eval key="$field"
-        echo "${field//$/}: $key "
-    done
+# SHELL list function
+shell_list() {
+    echo "DOMAIN:         $DOMAIN"
+    echo "ANTIVIRUS:      $ANTIVIRUS"
+    echo "ANTISPAM:       $ANTISPAM"
+    echo "DKIM:           $DKIM"
+    echo "CATCHALL:       $CATCHALL"
+    echo "ACCOUNTS:       $ACCOUNTS"
+    echo "DISK:           $U_DISK"
+    echo "SUSPENDED:      $SUSPENDED"
+    echo "TIME:           $TIME"
+    echo "DATE:           $DATE"
+}
+
+# PLAIN list function
+plain_list() {
+    echo -ne "$DOMAIN\t$ANTIVIRUS\t$ANTISPAM\t$DKIM\t$CATCHALL\t"
+    echo -e "$ACCOUNTS\t$U_DISK\t$SUSPENDED\t$TIME\t$DATE"
+}
+
+# CSV list function
+csv_list() {
+    echo -n "DOMAIN,ANTIVIRUS,ANTISPAM,DKIM,CATCHALL,ACCOUNTS,U_DISK,"
+    echo "SUSPENDED,TIME,DATE"
+    echo -n "$DOMAIN,$ANTIVIRUS,$ANTISPAM,$DKIM,$CATCHALL,$ACCOUNTS,$U_DISK"
+    echo "$SUSPENDED,$TIME,$DATE"
 }
 
 
@@ -61,6 +69,7 @@ shell_list_domain() {
 #----------------------------------------------------------#
 
 check_args '2' "$#" 'USER DOMAIN [FORMAT]'
+is_format_valid 'user' 'domain'
 is_object_valid 'user' 'USER' "$user"
 is_object_valid 'mail' 'DOMAIN' "$domain"
 
@@ -69,17 +78,15 @@ is_object_valid 'mail' 'DOMAIN' "$domain"
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining fileds to select
-conf=$USER_DATA/mail.conf
-fields='$DOMAIN $ANTIVIRUS $ANTISPAM $DKIM $ACCOUNTS $U_DISK $CATCHALL
-$SUSPENDED $TIME $DATE'
-
-# Listing domains
-case $format in 
-    json)   json_list_domain ;;
-    plain)  nohead=1; shell_list_domain ;;
-    shell)  shell_list_domain |column -t ;;
-    *)      check_args '2' '0' 'USER DOMAIN [FORMAT]'
+# Parsing mail domain
+eval $(grep "DOMAIN='$domain'" $USER_DATA/mail.conf)
+
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 27 - 17
bin/v-list-mail-domain-dkim

@@ -17,8 +17,8 @@ format=${3-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_ssl() {
+# JSON list function
+json_list() {
     echo '{'
     echo -e "\t\"$domain\": {"
     echo "        \"PEM\": \"$pem\","
@@ -26,14 +26,21 @@ json_list_ssl() {
     echo -e "\t}\n}"
 }
 
-# Shell function
-shell_list_ssl() {
-    if [ ! -z "$pem" ]; then
-        echo -e "$pem"
-    fi
-    if [ ! -z "$pub" ]; then
-        echo -e "\n$pub"
-    fi
+# SHELL list function
+shell_list() {
+    echo -e "$pem"
+    echo -e "\n$pub"
+}
+
+# PLAIN list function
+plain_list() {
+    echo "$pem\t$pub"
+}
+
+# CSV list function
+csv_list() {
+    echo "PEM,PUB"
+    echo "\"$pem\",\"$pub\""
 }
 
 
@@ -42,6 +49,7 @@ shell_list_ssl() {
 #----------------------------------------------------------#
 
 check_args '2' "$#" 'USER DOMAIN [FORMAT]'
+is_format_valid 'user' 'domain'
 is_object_valid 'user' 'USER' "$user"
 is_object_valid 'mail' 'DOMAIN' "$domain"
 
@@ -49,20 +57,22 @@ is_object_valid 'mail' 'DOMAIN' "$domain"
 #----------------------------------------------------------#
 #                       Action                             #
 #----------------------------------------------------------#
+
+# Parsing domain keys
 if [ -e "$USER_DATA/mail/$domain.pem" ]; then
-    pem=$(cat $USER_DATA/mail/$domain.pem | sed ':a;N;$!ba;s/\n/\\n/g')
+    pem=$(cat $USER_DATA/mail/$domain.pem |sed ':a;N;$!ba;s/\n/\\n/g')
 fi
 
 if [ -e "$USER_DATA/mail/$domain.pub" ]; then
-    pub=$(cat $USER_DATA/mail/$domain.pub | sed ':a;N;$!ba;s/\n/\\n/g')
+    pub=$(cat $USER_DATA/mail/$domain.pub |sed ':a;N;$!ba;s/\n/\\n/g')
 fi
 
-# Listing domains
+# Listing data
 case $format in
-    json)   json_list_ssl ;;
-    plain)  nohead=1; shell_list_ssl ;;
-    shell)  shell_list_ssl ;;
-    *)      check_args '1' '0' '[FORMAT]'
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 32 - 17
bin/v-list-mail-domain-dkim-dns

@@ -17,24 +17,38 @@ format=${3-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_dkim_dns() {
+# JSON list function
+json_list() {
     echo '{'
     echo -e "\t\"_domainkey\": {"
-    echo "        \"TTL\": \"3600\","
-    echo "        \"TXT\": \"'t=y; o=~;'\""
+    echo "            \"TTL\": \"3600\","
+    echo "            \"TXT\": \"'t=y; o=~;'\""
     echo -e "\t},"
     echo -e "\n\t\"mail._domainkey\": {"
-    echo "        \"TTL\": \"3600\","
-    echo "        \"TXT\": \"'$pub'\""
+    echo "            \"TTL\": \"3600\","
+    echo "            \"TXT\": \"\\\"$pub\\\"\""
     echo -e "\t}\n}"
+}
+
+# SHELL list function
+shell_list() {
+    echo "RECORD            TTL         TYPE      VALUE"
+    echo "------            ---         ----      -----"
+    echo "_domainkey        3600   IN   TXT      \"t=y; o=~;\""
+    echo "mail._domainkey   3600   IN   TXT      \"k=rsa; p=$pub\""
+}
 
+# PLAIN list function
+plain_list() {
+    echo -e "_domainkey\t3600\tIN\tTXT\t\"t=y; o=~;\""
+    echo -e "mail._domainkey\t3600\tIN\tTXT\t\"k=rsa; p=$pub\""
 }
 
-# Shell function
-shell_list_dkim_dns() {
-    echo "_domainkey      3600    IN    TXT    \"t=y; o=~;\""
-    echo "mail._domainkey 3600    IN    TXT    \"k=rsa; p=$pub\""
+# CSV list function
+csv_list() {
+    echo "RECORD,TTL,IN,TYPE,VALUE"
+    echo "_domainkey,3600,IN,TXT,\"\"t=y; o=~;\"\""
+    echo "mail._domainkey,3600,IN,TXT,\"\"k=rsa; p=$pub\"\""
 }
 
 
@@ -51,19 +65,20 @@ is_object_valid 'mail' 'DOMAIN' "$domain"
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Check pub key
+# Parsing domain keys
 if [ -e "$USER_DATA/mail/$domain.pub" ]; then
-    pub=$(cat $USER_DATA/mail/$domain.pub | sed ':a;N;$!ba;s/\n/\\n/g')
+    pub=$(cat $USER_DATA/mail/$domain.pub |grep -v "KEY-----")
+    pub=$(echo "$pub" |sed ':a;N;$!ba;s/\n/\\n/g')
 else
     pub="DKIM-SUPPORT-IS-NOT-ACTIVATED"
 fi
 
-# Listing domains
+# Listing data
 case $format in
-    json)   json_list_dkim_dns ;;
-    plain)  shell_list_dkim_dns ;;
-    shell)  shell_list_dkim_dns ;;
-    *)      check_args '1' '0' '[FORMAT]'
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t -s '^';;
 esac
 
 

+ 70 - 12
bin/v-list-mail-domains

@@ -16,13 +16,77 @@ format=${2-shell}
 # Includes
 source $VESTA/func/main.sh
 
+# JSON list function
+json_list() {
+    IFS=$'\n'
+    i=1
+    objects=$(grep DOMAIN $USER_DATA/mail.conf |wc -l)
+    echo "{"
+    while read str; do
+        eval $str
+        echo -n '    "'$DOMAIN'": {
+        "ANTIVIRUS": "'$ANTIVIRUS'",
+        "ANTISPAM": "'$ANTISPAM'",
+        "DKIM": "'$DKIM'",
+        "CATCHALL": "'$CATCHALL'",
+        "ACCOUNTS": "'$ACCOUNTS'",
+        "U_DISKL": "'$U_DISK'",
+        "SUSPENDED": "'$SUSPENDED'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
+        else
+            echo
+        fi
+        ((i++))
+    done < <(cat $USER_DATA/mail.conf)
+    echo '}'
+}
+
+# SHELL list function
+shell_list() {
+    IFS=$'\n'
+    echo "DOMAIN   ANTIVIRUS   ANTISPAM   DKIM  ACC   DISK   SPND   DATE"
+    echo "------   ---------   --------   ----  ---   ----   ---   ----"
+    while read str; do
+        eval $str
+        echo -n "$DOMAIN $ANTIVIRUS $ANTISPAM $DKIM $ACCOUNTS $U_DISK "
+        echo "$SUSPENDED $DATE"
+    done < <(cat $USER_DATA/mail.conf)
+}
+
+# PLAIN list function
+plain_list() {
+    IFS=$'\n'
+    while read str; do
+        eval $str
+        echo -ne "$DOMAIN\t$ANTIVIRUS\t$ANTISPAM\t$DKIM\t$CATCHALL\t"
+        echo -e "$ACCOUNTS\t$U_DISK\t$SUSPENDED\t$TIME\t$DATE"
+    done < <(cat $USER_DATA/mail.conf)
+}
+
+# CSV list function
+csv_list() {
+    IFS=$'\n'
+    echo -n "DOMAIN,ANTIVIRUS,ANTISPAM,DKIM,CATCHALL,ACCOUNTS,U_DISK,"
+    echo "SUSPENDED,TIME,DATE"
+    while read str; do
+        eval $str
+        echo -n "$DOMAIN,$ANTIVIRUS,$ANTISPAM,$DKIM,$CATCHALL,$ACCOUNTS,"
+        echo "'$U_DISK,$SUSPENDED,$TIME,$DATE"
+        echo
+    done < <(cat $USER_DATA/mail.conf)
+}
+
 
 #----------------------------------------------------------#
 #                    Verifications                         #
 #----------------------------------------------------------#
 
 check_args '1' "$#" 'USER [FORMAT]'
-validate_format 'user'
+is_format_valid 'user'
 is_object_valid 'user' 'USER' "$user"
 
 
@@ -30,18 +94,12 @@ is_object_valid 'user' 'USER' "$user"
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining fileds to select
-conf=$USER_DATA/mail.conf
-fields="\$DOMAIN \$ANTIVIRUS \$ANTISPAM \$DKIM \$ACCOUNTS \$U_DISK \$CATCHALL"
-fields="$fields \$SUSPENDED \$TIME \$DATE"
-
-# Listing domains
-case $format in 
+# Listing data
+case $format in
     json)   json_list ;;
-    plain)  nohead=1; shell_list ;;
-    shell) fields='$DOMAIN $ANTIVIRUS $ANTISPAM $DKIM $ACCOUNTS $U_DISK $DATE';
-            shell_list | column -t ;;
-    *)      check_args '1' '0' 'USER [FORMAT]'
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t ;;
 esac
 
 

+ 66 - 12
bin/v-list-remote-dns-hosts

@@ -15,30 +15,84 @@ format=${1-shell}
 # Includes
 source $VESTA/func/main.sh
 
+# JSON list function
+json_list() {
+    IFS=$'\n'
+    i=1
+    objects=$(grep HOST $VESTA/conf/dns-cluster.conf |wc -l)
+    echo "{"
+    while read str; do
+        eval $str
+        echo -n '    "'$HOST'": {
+        "PORT": "'$PORT'",
+        "TYPE": "'$TYPE'",
+        "USER": "'$USER'",
+        "DNS_USER": "'$DNS_USER'",
+        "SUSPENDED": "'$SUSPENDED'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
+        else
+            echo
+        fi
+        ((i++))
+    done < <(cat $VESTA/conf/dns-cluster.conf)
+    echo '}'
+}
 
-#----------------------------------------------------------#
-#                    Verifications                         #
-#----------------------------------------------------------#
+# SHELL list function
+shell_list() {
+    IFS=$'\n'
+    echo "HOST   PORT   TYPE   USER  DNS_USER   SPND   DATE"
+    echo "----   ----   ----   ----  --------   ----   ----"
+    while read str; do
+        eval $str
+        echo "$HOST $PORT $TYPE $USER $DNS_USER $SUSPENDED $DATE"
+    done < <(cat $VESTA/conf/dns-cluster.conf)
+}
+
+# PLAIN list function
+plain_list() {
+    IFS=$'\n'
+    while read str; do
+        eval $str
+        echo -ne "$HOST\t$PORT\t$TYPE\t$USER\t$DNS_USER\t"
+        echo -e "$SUSPENDED\t$TIME\t$DATE"
+    done < <(cat $VESTA/conf/dns-cluster.conf)
+}
+
+# CSV list function
+csv_list() {
+    IFS=$'\n'
+    echo "HOST,PORT,TYPE,USER,DNS_USER,SUSPENDED,TIME,DATE"
+    while read str; do
+        eval $str
+        echo "$HOST,$PORT,$TYPE,$USER,$DNS_USER,$SUSPENDED,$TIME,$DATE"
+    done < <(cat $VESTA/conf/dns-cluster.conf)
+}
 
 
 #----------------------------------------------------------#
-#                       Action                             #
+#                    Verifications                         #
 #----------------------------------------------------------#
 
-# Check config
-conf=$VESTA/conf/dns-cluster.conf
-if [ ! -e "$conf" ]; then
+if [ ! -e "$VESTA/conf/dns-cluster.conf" ]; then
     exit
 fi
 
-# Defining fileds to select
-fields='$HOST $USER $DNS_USER $SUSPENDED $TIME $DATE'
 
+#----------------------------------------------------------#
+#                       Action                             #
+#----------------------------------------------------------#
+
+# Listing data
 case $format in
     json)   json_list ;;
-    plain)  nohead=1; shell_list ;;
-    shell)  shell_list| column -t ;;
-    *)      check_args '1' '0' 'USER [FORMAT]';;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t ;;
 esac
 
 

+ 166 - 31
bin/v-list-sys-config

@@ -1,5 +1,5 @@
 #!/bin/bash
-# info: list system config
+# info: list system configuration
 # options: [FORMAT]
 #
 # The function for obtaining the list of system parameters.
@@ -12,33 +12,167 @@
 # Argument definition
 format=${1-shell}
 
-# Json function
-json_list_conf() {
-    lines=$(wc -l $VESTA/conf/vesta.conf | cut -f 1 -d ' ')
-    i='0'
-    IFS=$'\n'
-    echo -e "{\n\t\"config\": {"
-    for str in $(cat $VESTA/conf/vesta.conf); do
-        (( ++i))
-        key=${str%%=*}
-        value=${str#*=}
-        if [ "$i" -lt "$lines" ]; then
-            echo -e "\t\t\"$key\": \"${value//\'/}\","
-        else
-            echo -e "\t\t\"$key\": \"${value//\'/}\""
-        fi
-    done
-    echo -e "\t}\n}"
+source $VESTA/conf/vesta.conf
+
+# JSON list function
+json_list() {
+    echo '{
+    "config": {
+        "WEB_SYSTEM": "'$WEB_SYSTEM'",
+        "WEB_RGROUPS": "'$WEB_RGROUPS'",
+        "WEB_PORT": "'$WEB_PORT'",
+        "WEB_SSL": "'$WEB_SSL'",
+        "WEB_SSL_PORT": "'$WEB_SSL_PORT'",
+        "WEB_BACKEND": "'$WEB_BACKEND'",
+        "PROXY_SYSTEM": "'$PROXY_SYSTEM'",
+        "PROXY_PORT": "'$PROXY_PORT'",
+        "PROXY_SSL_PORT": "'$PROXY_SSL_PORT'",
+        "FTP_SYSTEM": "'$FTP_SYSTEM'",
+        "MAIL_SYSTEM": "'$MAIL_SYSTEM'",
+        "IMAP_SYSTEM": "'$IMAP_SYSTEM'",
+        "ANTIVIRUS_SYSTEM": "'$ANTIVIRUS_SYSTEM'",
+        "ANTISPAM_SYSTEM": "'$ANTISPAM_SYSTEM'",
+        "DB_SYSTEM": "'$DB_SYSTEM'",
+        "DNS_SYSTEM": "'$DNS_SYSTEM'",
+        "DNS_CLUSTER": "'$DNS_CLUSTER'",
+        "STATS_SYSTEM": "'$STATS_SYSTEM'",
+        "BACKUP_SYSTEM": "'$BACKUP_SYSTEM'",
+        "CRON_SYSTEM": "'$CRON_SYSTEM'",
+        "DISK_QUOTA": "'$DISK_QUOTA'",
+        "FIREWALL_SYSTEM": "'$FIREWALL_SYSTEM'",
+        "FIREWALL_EXTENSION": "'$FIREWALL_EXTENSION'",
+        "FILEMANAGER_KEY": "'$FILEMANAGER_KEY'",
+        "SFTPJAIL_KEY": "'$SFTPJAIL_KEY'",
+        "REPOSITORY": "'$REPOSITORY'",
+        "VERSION": "'$VERSION'",
+        "LANGUAGE": "'$LANGUAGE'",
+        "BACKUP_GZIP": "'$BACKUP_GZIP'",
+        "BACKUP": "'$BACKUP'",
+        "MAIL_URL": "'$MAIL_URL'",
+        "DB_PMA_URL": "'$DB_PMA_URL'",
+        "DB_PGA_URL": "'$DB_PGA_URL'"
+    }
+}'
 }
 
-# Shell function
-shell_list_conf() {
-    IFS=$'\n'
-    for str in $(cat $VESTA/conf/vesta.conf); do
-        key=${str%%=*}
-        value=${str#*=}
-        echo "$key: ${value//\'/}"
-    done
+# Shell list
+shell_list() {
+    if [ ! -z "$WEB_SYSTEM" ]; then
+        echo "WEB Server:     $WEB_SYSTEM:$WEB_PORT ($WEB_RGROUPS)"
+        echo "SSL Support:    $WEB_SSL:$WEB_SSL_PORT"
+    fi
+    if [ ! -z "$WEB_BACKEND" ]; then
+        echo "WEB Backend:    $WEB_BACKEND"
+    fi
+    if [ ! -z "$PROXY_SYSTEM" ]; then
+        echo "Proxy Server:   $PROXY_SYSTEM:$PROXY_PORT"
+        echo "Proxy SSL:      $PROXY_SYSTEM:$PROXY_SSL_PORT"
+    fi
+    if [ ! -z "$STATS_SYSTEM" ]; then
+        echo "Web Stats:      ${STATS_SYSTEM//,/, }"
+    fi
+    if [ ! -z "$FTP_SYSTEM" ]; then
+        echo "FTP Server:     $FTP_SYSTEM"
+    fi
+    if [ ! -z "$MAIL_SYSTEM" ]; then
+        echo -n "Mail Server:    $MAIL_SYSTEM"
+        if [ ! -z "$IMAP_SYSTEM" ]; then
+            echo -n " + $IMAP_SYSTEM"
+        fi
+        if [ ! -z "$ANTIVIRUS_SYSTEM" ]; then
+            echo -n " + $ANTIVIRUS_SYSTEM"
+        fi
+        if [ ! -z "$ANTISPAM_SYSTEM" ]; then
+            echo -n " + $ANTISPAM_SYSTEM"
+        fi
+        echo
+        if [ ! -z "$MAIL_URL" ]; then
+            echo "Web Mail:       hostname + $MAIL_URL"
+        fi
+    fi
+    if [ ! -z "$DB_SYSTEM" ]; then
+        echo "Database:       ${DB_SYSTEM//,/, }"
+        if [ ! -z "$DB_PMA_URL" ]; then
+            echo "PMA URL:        $DB_PMA_URL"
+        fi
+        if [ ! -z "$DB_PGA_URL" ]; then
+            echo "PGA URL:        $DB_PGA_URL"
+        fi
+    fi
+    if [ ! -z "$DNS_SYSTEM" ]; then
+        echo -n "DNS server:     $DNS_SYSTEM"
+        if [ ! -z "$DNS_CLUSTER" ]; then
+            echo -n " (cluster)"
+        fi
+        echo
+    fi
+    if [ ! -z "$CRON_SYSTEM" ]; then
+        echo "CRON:           $CRON_SYSTEM"
+    fi
+    if [ ! -z "$FIREWALL_SYSTEM" ]; then
+        echo -n "Firewall:       $FIREWALL_SYSTEM"
+        if [ ! -z "$FIREWALL_EXTENSION" ]; then
+            echo -n "+ $FIREWALL_EXTENSION"
+        fi
+        echo
+    fi
+    if [ ! -z "$BACKUP_SYSTEM" ]; then
+        echo "Backups:        ${BACKUP_SYSTEM//,/, }"
+        if [ ! -z "$BACKUP" ]; then
+            echo "Backup Dir:     $BACKUP"
+        fi
+    fi
+    if [ ! -z "$DISK_QUOTA" ]; then
+        echo "Disk Quota:     $DISK_QUOTA"
+    fi
+    if [ ! -z "$FILEMANAGER_KEY" ]; then
+        echo "FileManager:    $FILEMANAGER_KEY"
+    fi
+    if [ ! -z "$SFTPJAIL_KEY" ]; then
+        echo "SFTP Chroot:    $SFTPJAIL_KEY"
+    fi
+    if [ ! -z "$LANGUAGE" ] && [ "$LANGUAGE" != 'en' ]; then
+        echo "Language:       $LANGUAGE"
+    fi
+    echo "Version:        $VERSION"
+}
+
+# PLAIN list function
+plain_list() {
+    echo -ne "$WEB_SYSTEM\t$WEB_RGROUPS\t$WEB_PORT\t$WEB_SSL\t"
+    echo -ne "$WEB_SSL_PORT\t$WEB_BACKEND\t$PROXY_SYSTEM\t$PROXY_PORT\t"
+    echo -ne "$PROXY_SSL_PORT\t$FTP_SYSTEM\t$MAIL_SYSTEM\t$IMAP_SYSTEM\t"
+    echo -ne "$ANTIVIRUS_SYSTEM\t$ANTISPAM_SYSTEM\t$DB_SYSTEM\t"
+    echo -ne "$DNS_SYSTEM\t$DNS_CLUSTER\t$STATS_SYSTEM\t$BACKUP_SYSTEM\t"
+    echo -ne "$CRON_SYSTEM\t$DISK_QUOTA\t$FIREWALL_SYSTEM\t"
+    echo -ne "$FIREWALL_EXTENSION\t$FILEMANAGER_KEY\t$SFTPJAIL_KEY\t"
+    echo -ne "$REPOSITORY\t$VERSION\t$LANGUAGE\t$BACKUP_GZIP\t$BACKUP\t"
+    echo -e "$MAIL_URL\t$DB_PMA_URL\t$DB_PGA_URL"
+}
+
+
+# CSV list
+csv_list() {
+    echo -n "'WEB_SYSTEM','WEB_RGROUPS','WEB_PORT','WEB_SSL',"
+    echo -n "'WEB_SSL_PORT','WEB_BACKEND','PROXY_SYSTEM','PROXY_PORT',"
+    echo -n "'PROXY_SSL_PORT','FTP_SYSTEM','MAIL_SYSTEM','IMAP_SYSTEM',"
+    echo -n "'ANTIVIRUS_SYSTEM','ANTISPAM_SYSTEM','DB_SYSTEM',"
+    echo -n "'DNS_SYSTEM','DNS_CLUSTER','STATS_SYSTEM','BACKUP_SYSTEM',"
+    echo -n "'CRON_SYSTEM','DISK_QUOTA','FIREWALL_SYSTEM',"
+    echo -n "'FIREWALL_EXTENSION','FILEMANAGER_KEY','SFTPJAIL_KEY',"
+    echo -n "'REPOSITORY','VERSION','LANGUAGE','BACKUP_GZIP','BACKUP',"
+    echo -n "'MAIL_URL','DB_PMA_URL','DB_PGA_URL'"
+    echo
+    echo -n "'$WEB_SYSTEM','$WEB_RGROUPS','$WEB_PORT','$WEB_SSL',"
+    echo -n "'$WEB_SSL_PORT','$WEB_BACKEND','$PROXY_SYSTEM','$PROXY_PORT',"
+    echo -n "'$PROXY_SSL_PORT','$FTP_SYSTEM','$MAIL_SYSTEM','$IMAP_SYSTEM',"
+    echo -n "'$ANTIVIRUS_SYSTEM','$ANTISPAM_SYSTEM','$DB_SYSTEM',"
+    echo -n "'$DNS_SYSTEM','$DNS_CLUSTER','$STATS_SYSTEM','$BACKUP_SYSTEM',"
+    echo -n "'$CRON_SYSTEM','$DISK_QUOTA','$FIREWALL_SYSTEM',"
+    echo -n "'$FIREWALL_EXTENSION','$FILEMANAGER_KEY','$SFTPJAIL_KEY',"
+    echo -n "'$REPOSITORY','$VERSION','$LANGUAGE','$BACKUP_GZIP','$BACKUP',"
+    echo -n "'$MAIL_URL','$DB_PMA_URL','$DB_PGA_URL'"
+    echo
 }
 
 
@@ -46,11 +180,12 @@ shell_list_conf() {
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Listing system config
-case $format in 
-    json)   json_list_conf ;;
-    plain)  shell_list_conf ;;
-    shell)  shell_list_conf | column -t ;;
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  shell_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 1 - 1
bin/v-list-sys-db-status

@@ -65,7 +65,7 @@ for db in $(echo $DB_SYSTEM| tr ',' '\n'); do
             fi
 
             # Checking PostgreSQL
-            if [ "$db" = 'pgsql' ]; then
+            if [ "$db" = 'pgsql' ] && [ ! -z "$(which psql)" ]; then
                 echo "PostgreSQL $HOST status"
                 export PGPASSWORD="$PASSWORD"
                 psql -h $HOST -U $USER -c "SELECT * FROM pg_stat_activity"

+ 39 - 24
bin/v-list-sys-info

@@ -15,6 +15,38 @@ format=${1-shell}
 # Includes
 source $VESTA/func/main.sh
 
+# JSON list function
+json_list() {
+    echo '{'
+    echo '    "sysinfo": {
+        "HOSTNAME": "'$HOSTNAME'",
+        "OS": "'$OS'",
+        "VERSION": "'$VERSION'",
+        "ARCH": "'$ARCH'",
+        "UPTIME": "'$UPTIME'",
+        "LOADAVERAGE": "'$LOADAVERAGE'"
+        }'
+    echo '}'
+}
+
+# SHELL list function
+shell_list() {
+    echo "HOSTNAME   OS   VER   ARCH  UPTIME   LA"
+    echo "--------   --   ---   ----  ------   --"
+    echo "$HOSTNAME $OS $VERSION $ARCH $UPTIME $LOADAVERAGE"
+}
+
+# PLAIN list function
+plain_list() {
+    echo -e "$HOSTNAME\t$OS\t$VERSION\t$ARCH\t$UPTIME\t$LOADAVERAGE"
+}
+
+# CSV list function
+csv_list() {
+    echo "HOSTNAME,OS,VERSION,ARCH,UPTIME,LOADAVERAGE"
+    echo "$HOSTNAME,$OS,$VERSION,$ARCH,$UPTIME,$LOADAVERAGE"
+}
+
 
 #----------------------------------------------------------#
 #                       Action                             #
@@ -30,13 +62,13 @@ if [ -e '/etc/redhat-release' ]; then
     else
         OS="RHEL"
     fi
-    VERSION=$(cat /etc/redhat-release | tr ' ' '\n' |grep [0-9])
+    VERSION=$(cat /etc/redhat-release| tr ' ' '\n' |grep [0-9])
 else
     if [ "$(lsb_release -si)" == "Ubuntu" ] && [ -e '/etc/debian_version' ]; then
         OS="Ubuntu"
         VERSION=$(grep DISTRIB_RELEASE /etc/lsb-release| cut -f 2 -d '=')
     else
-        distro=$(head -n1 /etc/issue | cut -f 1 -d ' ')
+        distro=$(head -n1 /etc/issue |cut -f 1 -d ' ')
         if [ "$distro" = 'Debian' ]; then
             OS="Debian"
             VERSION=$(cat /etc/debian_version)
@@ -52,36 +84,19 @@ ARCH=$(arch)
 
 # Check uptime
 UPTIME=$(cat /proc/uptime |cut -f 1 -d ' '|cut -f 1 -d .)
-UPTIME="$(echo $UPTIME / 60 | bc)"
+UPTIME="$(echo $UPTIME / 60 |bc)"
 
 # Check LoadAverage
 LOADAVERAGE=$(cat /proc/loadavg |cut -f 1 -d ' ')
 
-# Create tmp file
-tmp_file=$(mktemp)
-
-# Define key/value pairs
-str="SYS='sysinfo' HOSTNAME='$HOSTNAME' OS='$OS' VERSION='$VERSION'"
-str="$str ARCH='$ARCH' UPTIME='$UPTIME' LOADAVERAGE='$LOADAVERAGE'"
-
-# Defining config
-echo -e "$str" > $tmp_file
-conf=$tmp_file
-
-# Defining fileds to select
-fields="\$SYS \$HOSTNAME \$OS \$VERSION \$ARCH \$UPTIME \$LOADAVERAGE"
-
-# Listing services
+# Listing data
 case $format in
     json)   json_list ;;
-    plain)  nohead=1; shell_list ;;
-    shell)  fields="\$HOSTNAME \$OS \$VERSION \$ARCH \$UPTIME \$LOADAVERAGE"
-            shell_list | column -t ;;
-    *)      check_args '1' '0' 'USER [FORMAT]'
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t ;;
 esac
 
-rm -f $tmp_file
-
 #----------------------------------------------------------#
 #                       Vesta                              #
 #----------------------------------------------------------#

+ 39 - 24
bin/v-list-sys-interfaces

@@ -15,31 +15,43 @@ format=${1-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_iface() {
-    dev=$(cat /proc/net/dev |grep : |cut -f 1 -d : |tr -d ' ' |grep -v lo)
-    int_counter=$(echo "$dev" | wc -l)
+# JSON list function
+json_list() {
+    objects=$(echo "$interfaces" |wc -l)
     i=1
     echo '['
-    for interface in $dev; do
-        if [ "$i" -lt "$int_counter" ]; then
-            echo -e  "\t\"$interface\","
+    for interface in $interfaces; do
+        echo -n '    "'$interfaces'"'
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
         else
-            echo -e  "\t\"$interface\""
+            echo
         fi
-        (( ++i))
+        ((i++))
     done
-    echo "]"
+    echo ']'
 }
 
-# Shell function
-shell_list_iface() {
-    dev=$(cat /proc/net/dev |grep : |cut -f 1 -d : |tr -d ' ' |grep -v lo)
-    if [ -z "$nohead" ]; then
-        echo "INTERFACES"
-        echo "----------"
-    fi
-    for interface in $dev; do
+# SHELL list function
+shell_list() {
+    echo "INTERFACE"
+    echo "---------"
+    for interface in $interfaces; do
+        echo "$interface"
+    done
+}
+
+# PLAIN list function
+plain_list() {
+    for interface in $interfaces; do
+        echo "$interface"
+    done
+}
+
+# CSV list function
+csv_list() {
+    echo "INTERFACE"
+    for interface in $interfaces; do
         echo "$interface"
     done
 }
@@ -49,12 +61,15 @@ shell_list_iface() {
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Listing domains
-case $format in 
-    json)   json_list_iface ;;
-    plain)  nohead=1; shell_list_iface ;;
-    shell)  shell_list_iface ;;
-    *)      check_args '1' '0' '[FORMAT]' ;;
+# Defining interface list
+interfaces=$(cat /proc/net/dev |grep : |cut -f 1 -d : |tr -d ' ' |grep -v lo)
+
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list;;
 esac
 
 

+ 57 - 50
bin/v-list-sys-ip

@@ -11,50 +11,57 @@
 
 # Argument definition
 ip=$1
-IP=$ip
 format=${2-shell}
 
 # Includes
 source $VESTA/func/main.sh
 source $VESTA/func/ip.sh
 
-# Json function
-json_list_ip() {
-    i=1
-    fileds_count=$(echo "$fields" | wc -w)
-    ip_data=$(cat $VESTA/data/ips/$IP)
+# JSON list function
+json_list() {
     echo '{'
-    eval $ip_data
-    for field in $fields; do
-        eval value=$field
-        if [ $i -eq 1 ]; then
-            echo -e "\t\"$value\": {"
-        else
-            if [ $fileds_count -eq $i ]; then
-                echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
-            else
-                echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
-            fi
-        fi
-    (( ++i))
-    done
-    if [ -n "$value" ]; then
-        echo -e '        }'
-    fi
-    echo -e '}'
+    echo '    "'$ip'": {
+        "OWNER": "'$OWNER'",
+        "STATUS": "'$STATUS'",
+        "NAME": "'$NAME'",
+        "U_SYS_USERS": "'$U_SYS_USERS'",
+        "U_WEB_DOMAINS": "'$U_WEB_DOMAINS'",
+        "INTERFACE": "'$INTERFACE'",
+        "NETMASK": "'$NETMASK'",
+        "NAT": "'$NAT'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+        }'
+    echo '}'
 }
 
-# Shell function
-shell_list_ip() {
-    line=$(cat $VESTA/data/ips/$IP)
-    eval $line
-    for field in $fields; do
-        eval key="$field"
-        if [ -z "$key" ]; then
-            key='NULL'
-        fi
-        echo "${field//$/}: $key "
-    done
+# SHELL list function
+shell_list() {
+    echo "IP:             $ip"
+    echo "NETMASK:        $NETMASK"
+    echo "INTERFACE:      $INTERFACE"
+    echo "NAT:            $NAT"
+    echo "OWNER:          $OWNER"
+    echo "STATUS:         $STATUS"
+    echo "NAME:           $NAME"
+    echo "USERS:          $U_SYS_USERS"
+    echo "DOMAINS:        $U_WEB_DOMAINS"
+    echo "TIME:           $TIME"
+    echo "DATE:           $DATE"
+}
+
+# PLAIN list function
+plain_list() {
+    echo -ne "$IP\t$OWNER\t$STATUS\t$NAME\t$U_SYS_USERS\t$U_WEB_DOMAINS\t"
+    echo -e "$INTERFACE\t$NETMASK\t$NAT\t$TIME\t$DATE"
+}
+
+# CSV list function
+csv_list() {
+    echo -n "IP,OWNER,STATUS,NAME,U_SYS_USERS,U_WEB_DOMAINS,INTERFACE"
+    echo "NETMASK,NAT,TIME,DATE"
+    echo -n "$IP,$OWNER,$STATUS,$NAME,\"$U_SYS_USERS\",$U_WEB_DOMAINS,"
+    echo "$INTERFACE, $NETMASK,$NAT,$TIME,$DATE"
 }
 
 
@@ -62,26 +69,26 @@ shell_list_ip() {
 #                    Verifications                         #
 #----------------------------------------------------------#
 
-# Checking args
 check_args '1' "$#" 'IP [FORMAT]'
-validate_format 'ip'
-is_ip_valid
+is_format_valid 'ip'
+if [ ! -e "$VESTA/data/ips/$ip" ]; then
+    check_result $E_NOTEXIST "ip $ip doesn't exist"
+fi
+
 
 #----------------------------------------------------------#
 #                       Action                             #
 #----------------------------------------------------------#
-conf=$VESTA/data/ips/$IP
-
-# Defining fileds to select
-fields='$IP $OWNER $STATUS $NAME $U_SYS_USERS $U_WEB_DOMAINS $INTERFACE
-    $NETMASK $NAT $TIME $DATE'
-
-# Listing ip
-case $format in 
-    json)   json_list_ip ;;
-    plain)  shell_list_ip ;;
-    shell)  shell_list_ip | column -t ;;
-    *)      check_args '1' '0' 'IP [FORMAT]'
+
+# Parsing ip
+source $VESTA/data/ips/$ip
+
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 61 - 63
bin/v-list-sys-ips

@@ -2,7 +2,7 @@
 # info: list system ips
 # options: [FORMAT]
 #
-# The function for obtaining the list of system ip's.
+# The function for obtaining the list of system ip adresses.
 
 
 #----------------------------------------------------------#
@@ -15,62 +15,66 @@ format=${1-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_ips() {
+# JSON list function
+json_list() {
     echo '{'
-    ip_list=$(ls --sort=time $VESTA/data/ips/)
-    fileds_count=$(echo "$fields" | wc -w)
-    for IP in $ip_list; do
-        ip_data=$(cat $VESTA/data/ips/$IP)
-        eval $ip_data
-        if [ -n "$data" ]; then
-            echo -e '        },'
+    ip_count=$(ls $VESTA/data/ips/ |wc -l)
+    i=1
+    while read IP; do
+        source $VESTA/data/ips/$IP
+        echo -n '    "'$IP'": {
+        "OWNER": "'$OWNER'",
+        "STATUS": "'$STATUS'",
+        "NAME": "'$NAME'",
+        "U_SYS_USERS": "'$U_SYS_USERS'",
+        "U_WEB_DOMAINS": "'$U_WEB_DOMAINS'",
+        "INTERFACE": "'$INTERFACE'",
+        "NETMASK": "'$NETMASK'",
+        "NAT": "'$NAT'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+        }'
+        if [ "$i" -lt "$ip_count" ]; then
+            echo ','
+        else
+            echo
+        fi
+        ((i++))
+    done < <(ls $VESTA/data/ips/)
+    echo '}'
+}
+
+# SHELL list function
+shell_list() {
+    echo "IP   MASK   NAT   STATUS   WEB  DATE"
+    echo "--   ----   ---   ------   ---  ----"
+    while read IP; do
+        source $VESTA/data/ips/$IP
+        if [ -z "$NAT" ]; then
+            NAT='no'
         fi
-        i=1
-        for field in $fields; do
-            eval value=$field
-            if [ $i -eq 1 ]; then
-                (( ++i))
-                echo -e "\t\"$value\": {"
-            else
-                if [ $i -lt $fileds_count ]; then
-                    (( ++i))
-                    echo -e "\t\t\"${field//$/}\": \"$value\","
-                else
-                    echo -e "\t\t\"${field//$/}\": \"$value\""
-                    data=1
-                fi
-            fi
-        done
-    done
-    if [ -n "$data" ]; then
-        echo -e '        }'
-    fi
-    echo -e '}'
+        echo "$IP $NETMASK $NAT $STATUS $U_WEB_DOMAINS $DATE"
+    done < <(ls $VESTA/data/ips/)
 }
 
-# Shell function
-shell_list_ips() {
-    ip_list=$(ls $VESTA/data/ips/)
-    if [ -z "$nohead" ]; then
-        echo "${fields//$/}"
-        for a in $fields; do
-            echo -e "--------- \c"
-        done
-        echo
-    fi
+# PLAIN list function
+plain_list() {
+    while read IP; do
+        source $VESTA/data/ips/$IP
+        echo -ne "$IP\t$OWNER\t$STATUS\t$NAME\t$U_SYS_USERS\t$U_WEB_DOMAINS\t"
+        echo -e "$INTERFACE\t$NETMASK\t$NAT\t$TIME\t$DATE"
+    done < <(ls $VESTA/data/ips/)
+}
 
-    for IP in $ip_list; do
+# CSV list function
+csv_list() {
+    echo -n "IP,OWNER,STATUS,NAME,U_SYS_USERS,U_WEB_DOMAINS,INTERFACE"
+    echo "NETMASK,NAT,TIME,DATE"
+    while read IP; do
         source $VESTA/data/ips/$IP
-        for field in $fields; do
-            eval value=$field
-            if [ -z "$value" ]; then
-                value='NULL'
-            fi
-            echo -n "$value "
-        done
-        echo
-    done
+        echo -n "$IP,$OWNER,$STATUS,$NAME,\"$U_SYS_USERS\",$U_WEB_DOMAINS,"
+        echo "$INTERFACE, $NETMASK,$NAT,$TIME,$DATE"
+    done < <(ls $VESTA/data/ips/)
 }
 
 
@@ -78,18 +82,12 @@ shell_list_ips() {
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining fileds to select
-conf=$VESTA/data/ips/*
-fields="\$IP \$OWNER \$STATUS \$NAME \$U_SYS_USERS \$U_WEB_DOMAINS"
-fields="$fields \$INTERFACE \$NETMASK \$NAT \$TIME \$DATE"
-
-# Listing ip addresses
-case $format in 
-    json)   json_list_ips ;;
-    plain)  nohead=1; shell_list_ips ;;
-    shell)  fields='$IP $NETMASK $NAT $OWNER $U_WEB_DOMAINS';
-            shell_list_ips | column -t ;;
-    *)      check_args '1' '0' '[FORMAT]'
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t ;;
 esac
 
 

+ 30 - 17
bin/v-list-sys-languages

@@ -16,13 +16,13 @@ format=${1-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_lang() {
-    int_counter=$(echo "$languages" | wc -l)
+# JSON list function
+json_list() {
+    objects=$(echo "$languages" |wc -l)
     i=1
     echo '['
     for lang in $languages; do
-        if [ "$i" -lt "$int_counter" ]; then
+        if [ "$i" -lt "$objects" ]; then
             echo -e  "\t\"$lang\","
         else
             echo -e  "\t\"$lang\""
@@ -32,12 +32,25 @@ json_list_lang() {
     echo "]"
 }
 
-# Shell function
-shell_list_lang() {
-    if [ -z "$nohead" ]; then
-        echo "LANGUAGES"
-        echo "----------"
-    fi
+# SHELL list function
+shell_list() {
+    echo "LANGUAGE"
+    echo "--------"
+    for lang in $languages; do
+        echo "$lang"
+    done
+}
+
+# PLAIN list function
+plain_list() {
+    for lang in $languages; do
+        echo "$lang"
+    done
+}
+
+# CSV list function
+csv_list() {
+    echo "LANGUAGE"
     for lang in $languages; do
         echo "$lang"
     done
@@ -48,15 +61,15 @@ shell_list_lang() {
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Check languages
-languages=$(ls $VESTA/web/inc/i18n/|cut -f 1 -d .)
+# Defining language list
+languages=$(ls $VESTA/web/inc/i18n/ |cut -f 1 -d .)
 
-# Listing domains
+# Listing data
 case $format in
-    json)   json_list_lang ;;
-    plain)  nohead=1; shell_list_lang ;;
-    shell)  shell_list_lang ;;
-    *)      check_args '1' '0' '[FORMAT]' ;;
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list;;
 esac
 
 

+ 63 - 18
bin/v-list-sys-rrd

@@ -15,10 +15,16 @@ format=${1-shell}
 source $VESTA/func/main.sh
 source $VESTA/conf/vesta.conf
 
-# Define json function
-json_list_rrd() {
+# JSON list function
+json_list() {
     i=1
     echo "{"
+
+    # Generating timestamp
+    time_n_date=$(date +'%T %F')
+    TIME=$(echo "$time_n_date" |cut -f 1 -d \ )
+    DATE=$(echo "$time_n_date" |cut -f 2 -d \ )
+
     for type in $rrd_types; do
         for rrd in $(ls $RRD/$type |grep rrd$ |sed "s/\.rrd$//g"); do
             if [ "$i" -ne 1 ]; then
@@ -61,12 +67,37 @@ json_list_rrd() {
     echo "}"
 }
 
-# Define jshell function
-shell_list_rrd() {
-    if [  -z "$nohead" ]; then
-        echo "PATH"
-        echo "---------"
-    fi
+# SHELL list function
+shell_list() {
+       echo "TYPE   VAL_1   VAL_2   VAL_3   TIME   DATE"
+       echo "----   -----   -----   -----   ----   ----"
+    for type in $rrd_types; do
+        for rrd in $(ls $RRD/$type |grep rrd$ |sed "s/\.rrd$//g"); do
+            rrd_type=$(echo  "$rrd" |tr '[:lower:]' '[:upper:]')
+            rrd_data=$(rrdtool fetch "$RRD/$type/$rrd.rrd" AVERAGE -e 0 -s 0)
+            rrd_data=$(echo "$rrd_data" |tail -n 1)
+            rrd_timestamp=$(echo "$rrd_data" |cut -f 1 -d :)
+            rrd_time=$(date -d "@$rrd_timestamp" +%F)
+            rrd_date=$(date -d "@$rrd_timestamp" +%T)
+            rrd_val1=$(echo "$rrd_data" |awk '{print $2}' |cut -d. -f1)
+            rrd_val2=$(echo "$rrd_data" |awk '{print $3}' |cut -d. -f1)
+            rrd_val3=$(echo "$rrd_data" |awk '{print $4}' |cut -d. -f1)
+            if [ -z "$rrd_val1" ]; then
+                rrd_val1="-nan"
+            fi
+            if [ -z "$rrd_val2" ]; then
+                rrd_val2="-nan"
+            fi
+            if [ -z "$rrd_val3" ]; then
+                rrd_val3="-nan"
+            fi
+            echo "$rrd_type $rrd_val1 $rrd_val2 $rrd_val3 $rrd_time $rrd_date"
+        done
+    done
+}
+
+# PLAIN list function
+plain_list() {
     for type in $rrd_types; do
         for rrd in $(ls $RRD/$type |grep rrd$ |sed "s/\.rrd$//g"); do
             echo "$RRD/$type/$rrd.rrd"
@@ -74,39 +105,53 @@ shell_list_rrd() {
     done
 }
 
+# CSV list function
+csv_list() {
+    for type in $rrd_types; do
+        echo "RRD"
+        for rrd in $(ls $RRD/$type |grep rrd$ |sed "s/\.rrd$//g"); do
+            echo "$RRD/$type/$rrd.rrd"
+        done
+    done
+}
 
 
 #----------------------------------------------------------#
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Checking enabled systems
+# Definng rrd charts
 rrd_types="la mem net"
 
-if [ -n "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
+# Checking web system
+if [ ! -z "$WEB_SYSTEM" ]; then
     rrd_types="$rrd_types web"
 fi
 
-if [ -n "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then
+# Checking mail system
+if [ ! -z "$MAIL_SYSTEM" ]; then
     rrd_types="$rrd_types mail"
 fi
 
-if [ -n "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then
+# Checking db system
+if [ ! -z "$DB_SYSTEM" ]; then
     rrd_types="$rrd_types db"
 fi
 
-if [ -n "$FTP_SYSTEM" ] && [ "$FTP_SYSTEM" != 'no' ]; then
+# Checking ftp system
+if [ ! -z "$FTP_SYSTEM" ]; then
     rrd_types="$rrd_types ftp"
 fi
 
+# Adding ssh
 rrd_types="$rrd_types ssh"
 
-
-# Listing domains
+# Listing data
 case $format in
-    json)   json_list_rrd ;;
-    plain)  nohead=1; shell_list_rrd ;;
-    shell)  shell_list_rrd | column -t ;;
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t ;;
 esac
 
 

+ 160 - 126
bin/v-list-sys-services

@@ -18,25 +18,80 @@ source $VESTA/conf/vesta.conf
 
 export PATH=$PATH:/sbin
 
+# JSON list function
+json_list() {
+    IFS=$'\n'
+    i=1
+    objects=$(echo -e "$data" |grep NAME |wc -l)
+    echo "{"
+    while read str; do
+        eval $str
+        echo -n '    "'$NAME'": {
+        "SYSTEM": "'$SYSTEM'",
+        "STATE": "'$STATE'",
+        "CPU": "'$CPU'",
+        "MEM": "'$MEM'",
+        "RTIME": "'$RTIME'"
+    }'
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
+        else
+            echo
+        fi
+        ((i++))
+    done < <(echo -e "$data" |grep NAME)
+    echo '}'
+}
+
+# SHELL list function
+shell_list() {
+    IFS=$'\n'
+    echo "NAME   STATE   CPU   MEM   UPTIME"
+    echo "----   -----   ---   ---   ------"
+    while read str; do
+        eval $str
+        echo "$NAME $STATE $CPU $MEM $RTIME"
+    done < <(echo -e "$data" |grep NAME)
+}
+
+# PLAIN list function
+plain_list() {
+    IFS=$'\n'
+    while read str; do
+        eval $str
+        echo -e "$NAME\t$SYSTEM\t$STATE\t$CPU\t$MEM\t$RTIME"
+    done < <(echo -e "$data" |grep NAME)
+}
+
+# CSV list function
+csv_list() {
+    IFS=$'\n'
+    echo "NAME,SYSTEM,STATE,CPU,MEM,RTIME"
+    while read str; do
+        eval $str
+        echo "$NAME,\"$SYSTEM\",$STATE,$CPU,$MEM,$RTIME"
+    done < <(echo -e "$data" |grep NAME)
+}
+
+# Get service state function
 get_srv_state() {
     srv=$1
-    proc_name=${2-$1}
-
-    # Check service status
+    name=${2-$1}
     state='running'
 
     # Searching related pids
     if [ -z $3 ]; then
-        pids=$(pidof $proc_name |tr ' ' '|')
+        pids=$(pidof $name |tr ' ' '|')
     else
-        pids=$(pidof -x $proc_name |tr ' ' '|')
+        pids=$(pidof -x $name |tr ' ' '|')
     fi
-    if [ -z "$pids" ] && [ "$proc_name" != 'nginx' ] ; then
-        #fallback to pgrep
-        pids=$(pgrep $proc_name |tr '\n' '|')
+    if [ -z "$pids" ] && [ "$name" != 'nginx' ]; then
+        pids=$(pgrep $name |tr '\n' '|')
     fi
+
+    # Checking pid
     if [ ! -z "$pids" ]; then
-        pid=$(echo $pids|cut -f 1 -d \|)
+        pid=$(echo "$pids" |cut -f 1 -d '|')
         pids=$(egrep "$pids" $tmp_file)
 
         # Calculating CPU usage
@@ -46,25 +101,30 @@ get_srv_state() {
         mem=$(echo "$pids" |awk '{sum += $3} END {print sum/1024 }')
         mem=$(printf "%.0f\n" $mem)
 
-        # Searching service uptime
+        # Searching pid file
+        pid_file=''
         if [ -e "/var/run/$srv.pid" ]; then
-            srv_file="/var/run/$srv.pid"
+            pid_file="/var/run/$srv.pid"
+        fi
+        if [ -z "$pid_file" ] && [ -e "/var/run/$srv/$srv.pid" ]; then
+            pid_file="/var/run/$srv/$srv.pid"
         fi
-        if [ -z "$srv_file" ] && [ -e "/var/run/$srv/$srv.pid" ]; then
-            srv_file="/var/run/$srv/$srv.pid"
+        if [ -z "$pid_file" ] && [ -e "/var/run/$name/$name.pid" ]; then
+            pid_file="/var/run/$name/$name.pid"
         fi
-        if [ -z $srv_file ] && [ -e "/proc/$pid" ]; then
-            srv_file="/proc/$pid"
+        if [ -z "$pid_file" ] && [ -e "/proc/$pid" ]; then
+            pid_file="/proc/$pid"
         fi
-        if [ ! -z "$srv_file" ]; then
-            mtime=$(stat -c "%Y" $srv_file)
+
+        # Calculating uptime
+        if [ ! -z "$pid_file" ]; then
+            mtime=$(stat -c "%Y" $pid_file)
             rtime=$((ctime - mtime))
             rtime=$((rtime  / 60))
         else
             rtime=0
         fi
     else
-        # Service is stopped
         state='stopped'
         mem=0
         cpu=0
@@ -77,105 +137,92 @@ get_srv_state() {
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Save current proccess list
+# Saving current proccess list
 tmp_file=$(mktemp)
 ps -eo pid,pcpu,size > $tmp_file
 
-# Get current time
+# Checking current time
 ctime=$(date +%s)
 
-# Web
-service=$WEB_SYSTEM
-if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
-    if [ "$service" == 'apache' ]; then
-        service='httpd'
-    fi
-    get_srv_state $service
-    str="NAME='$service' SYSTEM='web server' STATE='$state' CPU='$cpu'"
-    str="$str MEM='$mem' RTIME='$rtime'"
-
+# Checking WEB system
+if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'remote' ]; then
+    get_srv_state $WEB_SYSTEM
+    data="NAME='$WEB_SYSTEM' SYSTEM='web server' STATE='$state' CPU='$cpu'"
+    data="$data MEM='$mem' RTIME='$rtime'"
 fi
 
-# Backend
-service=$WEB_BACKEND
-if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
-    get_srv_state $service
-    str="$str\nNAME='$service' SYSTEM='backend server' STATE='$state' CPU='$cpu'"
-    str="$str MEM='$mem' RTIME='$rtime'"
+# Checking WEB Backend
+if [ ! -z "$WEB_BACKEND" ] && [ "$WEB_BACKEND" != 'remote' ]; then
+    get_srv_state $WEB_BACKEND
+    data="$data\nNAME='$WEB_BACKEND' SYSTEM='backend server' STATE='$state'"
+    data="$data CPU='$cpu' MEM='$mem' RTIME='$rtime'"
 fi
 
-# Proxy
-service=$PROXY_SYSTEM
-if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
-    get_srv_state $service
-    str="$str\nNAME='$service' SYSTEM='reverse proxy' STATE='$state' CPU='$cpu'"
-    str="$str MEM='$mem' RTIME='$rtime'"
+# Checking WEB Proxy
+if [ ! -z "$PROXY_SYSTEM" ] && [ "$PROXY_SYSTEM" != 'remote' ]; then
+    get_srv_state $PROXY_SYSTEM
+    data="$data\nNAME='$PROXY_SYSTEM' SYSTEM='reverse proxy' STATE='$state'"
+    data="$data CPU='$cpu' MEM='$mem' RTIME='$rtime'"
 fi
 
-
-# DNS
-service=$DNS_SYSTEM
-if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
-    if [ "$service" == 'bind' ] || [ "$service" == 'bind9' ]; then
+# Checking DNS system
+if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'remote' ]; then
+    if [ "$DNS_SYSTEM" == 'bind' ] || [ "$DNS_SYSTEM" == 'bind9' ]; then
         proc_name='named'
     fi
-    get_srv_state $service $proc_name
-    str="$str\nNAME='$service' SYSTEM='dns server' STATE='$state' CPU='$cpu'"
-    str="$str MEM='$mem' RTIME='$rtime'"
+    get_srv_state $DNS_SYSTEM $proc_name
+    data="$data\nNAME='$DNS_SYSTEM' SYSTEM='dns server' STATE='$state'"
+    data="$data CPU='$cpu' MEM='$mem' RTIME='$rtime'"
 fi
 
-# MAIL
-service=$MAIL_SYSTEM
-if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
-    get_srv_state $service
-    str="$str\nNAME='$service' SYSTEM='mail server' STATE='$state' CPU='$cpu'"
-    str="$str MEM='$mem' RTIME='$rtime'"
+# Checking MAIL system
+if [ ! -z "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'remote' ]; then
+    get_srv_state $MAIL_SYSTEM
+    data="$data\nNAME='$MAIL_SYSTEM' SYSTEM='mail server' STATE='$state'"
+    data="$data CPU='$cpu' MEM='$mem' RTIME='$rtime'"
 fi
 
-# IMAP
-service=$IMAP_SYSTEM
-if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
-    get_srv_state $service
-    str="$str\nNAME='$service' SYSTEM='pop/imap server' STATE='$state'"
-    str="$str CPU='$cpu' MEM='$mem' RTIME='$rtime'"
+# Checking MAIL IMAP
+if [ ! -z "$IMAP_SYSTEM" ] && [ "$IMAP_SYSTEM" != 'remote' ]; then
+    get_srv_state $IMAP_SYSTEM
+    data="$data\nNAME='$IMAP_SYSTEM' SYSTEM='pop/imap server' STATE='$state'"
+    data="$data CPU='$cpu' MEM='$mem' RTIME='$rtime'"
 fi
 
-# ANTIVIRUS
-service=$ANTIVIRUS_SYSTEM
-if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
+# Checking MAIL ANTIVIRUS
+if [ ! -z "$ANTIVIRUS_SYSTEM" ] && [ "$ANTIVIRUS_SYSTEM" != 'remote' ]; then
     if [ -e "/etc/redhat-release" ]; then
-        if [ "$ANTIVIRUS_SYSTEM" = 'clamav' ];then
-            service='clamd'
+        if [ "$ANTIVIRUS_SYSTEM" == 'clamav' ];then
+            ANTIVIRUS_SYSTEM='clamd'
         fi
-        get_srv_state $service
+        get_srv_state $ANTIVIRUS_SYSTEM
     else
-        if [ "$ANTIVIRUS_SYSTEM" = 'clamav-daemon' ];then
-            clam_proc_name='clamd'
+        if [ "$ANTIVIRUS_SYSTEM" == 'clamav-daemon' ];then
+            proc_name='clamd'
         fi
-        get_srv_state $service $clam_proc_name
+        get_srv_state $ANTIVIRUS_SYSTEM $proc_name
     fi
-    str="$str\nNAME='$service' SYSTEM='email antivirus' STATE='$state'"
-    str="$str CPU='$cpu' MEM='$mem' RTIME='$rtime'"
+    data="$data\nNAME='$ANTIVIRUS_SYSTEM' SYSTEM='email antivirus'"
+    data="$data STATE='$state' CPU='$cpu' MEM='$mem' RTIME='$rtime'"
+    proc_name=''
 fi
 
-# ANTISPAM
-service=$ANTISPAM_SYSTEM
-if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
-    get_srv_state $service spamd
-    str="$str\nNAME='$service' SYSTEM='email antispam' STATE='$state'"
-    str="$str CPU='$cpu' MEM='$mem' RTIME='$rtime'"
+# Checking MAIL ANTISPAM
+if [ ! -z "$ANTISPAM_SYSTEM" ] && [ "$ANTISPAM_SYSTEM" != 'remote' ]; then
+    get_srv_state $ANTISPAM_SYSTEM spamd
+    data="$data\nNAME='$ANTISPAM_SYSTEM' SYSTEM='email antispam'"
+    data="$data STATE='$state' CPU='$cpu' MEM='$mem' RTIME='$rtime'"
 fi
 
-# DB
-service=$DB_SYSTEM
-if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
+# Checking DB system
+if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'remote' ]; then
     for db in ${DB_SYSTEM//,/ }; do
-        db_proc_name=''
+        proc_name=''
         service="$db"
         if [ "$service" = 'mysql' ]; then
             if [ -e "/etc/redhat-release" ]; then
                 service='mysqld'
-                db_proc_name='mysqld'
+                proc_name='mysqld'
                 if [ -e "/usr/lib/systemd/system/mariadb.service" ]; then
                     service='mariadb'
                 fi
@@ -183,39 +230,37 @@ if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
         fi
         if [ "$service" == 'pgsql' ]; then
             service='postgresql'
-            db_proc_name='postmaster'
+            proc_name='postmaster'
             if [ ! -e "/etc/redhat-release" ]; then
-                db_proc_name='postgres'
+                proc_name='postgres'
             fi
             if [ ! -e '/etc/init.d/postgresql' ]; then
-                db_proc_name='postgres'
+                proc_name='postgres'
             fi
         fi
-        get_srv_state $service $db_proc_name
-        str="$str\nNAME='$service' SYSTEM='database server' STATE='$state'"
-        str="$str CPU='$cpu' MEM='$mem' RTIME='$rtime'"
+        get_srv_state $service $proc_name
+        data="$data\nNAME='$service' SYSTEM='database server' STATE='$state'"
+        data="$data CPU='$cpu' MEM='$mem' RTIME='$rtime'"
+        proc_name=''
     done
 fi
 
-# FTP
-service=$FTP_SYSTEM
-if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
-    get_srv_state $service
-    str="$str\nNAME='$service' SYSTEM='ftp server' STATE='$state' CPU='$cpu'"
-    str="$str MEM='$mem' RTIME='$rtime'"
+# Checking FTP system
+if [ ! -z "$FTP_SYSTEM" ] && [ "$FTP_SYSTEM" != 'remote' ]; then
+    get_srv_state $FTP_SYSTEM
+    data="$data\nNAME='$FTP_SYSTEM' SYSTEM='ftp server' STATE='$state'"
+    data="$data CPU='$cpu' MEM='$mem' RTIME='$rtime'"
 fi
 
-# CRON
-service=$CRON_SYSTEM
-if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
-    get_srv_state $service
-    str="$str\nNAME='$service' SYSTEM='job scheduler' STATE='$state'"
-    str="$str CPU='$cpu' MEM='$mem' RTIME='$rtime'"
+# Checking CRON system
+if [ ! -z "$CRON_SYSTEM" ] && [ "$CRON_SYSTEM" != 'remote' ]; then
+    get_srv_state $CRON_SYSTEM
+    data="$data\nNAME='$CRON_SYSTEM' SYSTEM='job scheduler' STATE='$state'"
+    data="$data CPU='$cpu' MEM='$mem' RTIME='$rtime'"
 fi
 
-# FIREWALL
-service=$FIREWALL_SYSTEM
-if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
+# Checking FIREWALL system
+if [ ! -z "$FIREWALL_SYSTEM" ] && [ "$FIREWALL_SYSTEM" != 'remote' ]; then
     state="stopped"
     /sbin/iptables -L vesta >/dev/null 2>&1
     if [ "$?" -eq 0 ]; then
@@ -225,32 +270,21 @@ if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
     str="$str STATE='$state' CPU='0' MEM='0' RTIME='0'"
 fi
 
-# Fail2ban
-service=$FIREWALL_EXTENSION
-if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
-    get_srv_state $service fail2ban-server script
-    str="$str\nNAME='$service' SYSTEM='brute-force monitor' STATE='$state'"
-    str="$str CPU='$cpu' MEM='$mem' RTIME='$rtime'"
+# Checking FIREWALL Fail2ban extention
+if [ ! -z "$FIREWALL_EXTENSION" ]; then
+    get_srv_state $FIREWALL_EXTENSION fail2ban-server script
+    data="$data\nNAME='$FIREWALL_EXTENSION' SYSTEM='brute-force monitor'"
+    data="$data STATE='$state' CPU='$cpu' MEM='$mem' RTIME='$rtime'"
 fi
 
-
-# Defining config
-echo -e "$str" > $tmp_file
-conf=$tmp_file
-
-# Defining fileds to select
-fields="\$NAME \$SYSTEM \$STATE \$CPU \$MEM \$RTIME"
-
-# Listing services
-case $format in 
+# Listing data
+case $format in
     json)   json_list ;;
-    plain)  nohead=1; shell_list ;;
-    shell)  fields='$NAME $STATE $CPU $MEM $RTIME'
-            shell_list | column -t ;;
-    *)      check_args '1' '0' 'USER [FORMAT]'
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t ;;
 esac
 
-rm -f $tmp_file
 
 #----------------------------------------------------------#
 #                       Vesta                              #

+ 30 - 18
bin/v-list-sys-shells

@@ -15,14 +15,12 @@ format=${1-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_sh() {
-    shells=$(grep -v '#' /etc/shells)
+# JSON list function
+json_list() {
     sh_counter=$(echo "$shells" | wc -l)
     i=1
     echo '['
     for shell in $shells; do
-        shell=$(basename $shell)
         if [ "$i" -lt "$sh_counter" ]; then
             echo -e  "\t\"$shell\","
         else
@@ -33,15 +31,26 @@ json_list_sh() {
     echo "]"
 }
 
-# Shell function
-shell_list_sh() {
-    shells=$(grep -v '#' /etc/shells)
-    if [ -z "$nohead" ]; then
-        echo "SHELLS"
-        echo "----------"
-    fi
+# SHELL list function
+shell_list() {
+    echo "SHELL"
+    echo "-----"
+    for shell in $shells; do
+        echo "$shell"
+    done
+}
+
+# PLAIN list function
+plain_list() {
+    for shell in $shells; do
+        echo "$shell"
+    done
+}
+
+# CSV list function
+csv_list() {
+    echo "SHELL"
     for shell in $shells; do
-        shell=$(basename $shell)
         echo "$shell"
     done
 }
@@ -51,12 +60,15 @@ shell_list_sh() {
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Listing domains
-case $format in 
-    json)   json_list_sh ;;
-    plain)  nohead=1; shell_list_sh ;;
-    shell)  shell_list_sh ;;
-    *)      check_args '1' '0' '[FORMAT]' ;;
+# Defining system shells
+shells=$(grep -v '#' /etc/shells |awk -F '/' '{print $NF}' |sort -u)
+
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 32 - 20
bin/v-list-sys-users

@@ -16,32 +16,44 @@ format=${1-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_users() {
-    users=$(grep @ /etc/passwd|cut -f 1 -d :)
-    int_counter=$(echo "$users" | wc -l)
+# JSON list function
+json_list() {
+    objects=$(echo "$users" |wc -l)
     i=1
     echo '['
-    for user in $users; do
-        if [ "$i" -lt "$int_counter" ]; then
+    while read user; do
+        if [ "$i" -lt "$objects" ]; then
             echo -e  "\t\"$user\","
         else
             echo -e  "\t\"$user\""
         fi
         (( ++i))
-    done
+    done < <(grep @ /etc/passwd |cut -f 1 -d :)
     echo "]"
 }
 
-# Shell function
-shell_list_users() {
-    if [ -z "$nohead" ]; then
-        echo "USERS"
-        echo "----------"
-    fi
-    for user in $(grep @ /etc/passwd|cut -f 1 -d :); do
+# SHELL list function
+shell_list() {
+    echo "USER"
+    echo "----"
+    while read user; do
         echo "$user"
-    done
+    done < <(grep @ /etc/passwd |cut -f 1 -d :)
+}
+
+# PLAIN list function
+plain_list() {
+    while read user; do
+        echo "$user"
+    done < <(grep @ /etc/passwd |cut -f 1 -d :)
+}
+
+# CSV list function
+csv_list() {
+    echo "USER"
+    while read user; do
+        echo "$user"
+    done < <(grep @ /etc/passwd |cut -f 1 -d :)
 }
 
 
@@ -49,12 +61,12 @@ shell_list_users() {
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Listing domains
+# Listing data
 case $format in
-    json)   json_list_users ;;
-    plain)  nohead=1; shell_list_users ;;
-    shell)  shell_list_users ;;
-    *)      check_args '1' '0' '[FORMAT]' ;;
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 30 - 13
bin/v-list-sys-vesta-autoupdate

@@ -16,8 +16,8 @@ format=${1-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_autoupdate() {
+# JSON list function
+json_list() {
     echo '['
     if [ -z "$check_cron" ]; then
         echo -e  "\t\"Disabled\","
@@ -27,12 +27,28 @@ json_list_autoupdate() {
     echo "]"
 }
 
-# Shell function
-shell_list_autoupdate() {
-    if [ -z "$nohead" ]; then
-        echo "AUTOUPDATE"
-        echo "----------"
+# SHELL list function
+shell_list() {
+    echo -n "AUTOUPDATE:     "
+    if [ -z "$check_cron" ]; then
+        echo "Disabled"
+    else
+        echo "Enabled"
+    fi
+}
+
+# PLAIN list function
+plain_list() {
+    if [ -z "$check_cron" ]; then
+        echo "Disabled"
+    else
+        echo "Enabled"
     fi
+}
+
+# CSV list function
+csv_list() {
+    echo "AUTOUPDATE"
     if [ -z "$check_cron" ]; then
         echo "Disabled"
     else
@@ -48,15 +64,16 @@ shell_list_autoupdate() {
 # Check cron tab
 check_cron=$(grep 'v-update-sys-vesta-all' $USER_DATA/cron.conf)
 
-# Listing domains
-case $format in 
-    json)   json_list_autoupdate ;;
-    plain)  nohead=1; shell_list_autoupdate ;;
-    shell)  shell_list_autoupdate ;;
-    *)      check_args '1' '0' '[FORMAT]' ;;
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list;;
 esac
 
 
+
 #----------------------------------------------------------#
 #                       Vesta                              #
 #----------------------------------------------------------#

+ 57 - 52
bin/v-list-sys-vesta-updates

@@ -14,22 +14,55 @@ format=${1-shell}
 
 # Includes
 source $VESTA/func/main.sh
+fields="\$NAME \$VERSION \$RELEASE \$ARCH \$UPDATED \$DESCR \$TIME \$DATE"
+
+# JSON list function
+json_list() {
+    IFS=$'\n'
+    i=1
+    objects=$(echo -e "$data" |grep NAME |wc -l)
+    echo "{"
+    for str in $(echo -e "$data"); do
+        eval $str
+        echo -n '    "'$NAME'": {
+        "VERSION": "'$VERSION'",
+        "RELEASE": "'$RELEASE'",
+        "ARCH": "'$ARCH'",
+        "UPDATED": "'$UPDATED'",
+        "DESCR": "'$DESCR'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
+        else
+            echo
+        fi
+        ((i++))
+    done
+    echo '}'
+}
+
+# SHELL list function
+shell_list() {
+    IFS=$'\n'
+    echo "PKG   VER   REL   ARCH   UPDT   DATE"
+    echo "---   ---   ---   ----   ----   ----"
+    for str in $(echo -e "$data"); do
+        eval $str
+        echo "$NAME $VERSION $RELEASE $ARCH $UPDATED $DATE"
+    done
+}
 
 
 #----------------------------------------------------------#
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Remove upd_flag
-rm -f $VESTA/web/.update
-
-# Create tmp file
-tmp_file=$(mktemp)
-
-# Check latest version
-wget -q -T 1 -t 1  http://c.vestacp.com/latest.txt -O $tmp_file
+# Checking official latest version
+latest=$(wget -q -T 1 -t 1 http://c.vestacp.com/latest.txt -O -)
 
-# Check vesta version
+# Checking installed vesta version
 if [ -e "/etc/redhat-release" ]; then
     rpm_format="VERSION='%{VERSION}'"
     rpm_format="$rpm_format RELEASE='%{RELEASE}'"
@@ -41,22 +74,20 @@ if [ -e "/etc/redhat-release" ]; then
 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 ' ')
+    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 \-)
     DATE=$(date -d @$pkg_date +"%F")
     TIME=$(date -d @$pkg_date +"%T")
 fi
-latest=$(grep vesta $tmp_file)
 UPDATED='yes'
 if [ ! -z "$latest" ] && [ "$latest" != "vesta-$VERSION-$RELEASE" ]; then
     UPDATED='no'
-    set_upd_flag='yes'
 fi
-str="NAME='vesta' VERSION='$VERSION' RELEASE='$RELEASE' ARCH='$ARCH'"
-str="$str UPDATED='$UPDATED' DESCR='core package' TIME='$TIME' DATE='$DATE'"
+data="NAME='vesta' VERSION='$VERSION' RELEASE='$RELEASE' ARCH='$ARCH'"
+data="$data UPDATED='$UPDATED' DESCR='core package' TIME='$TIME' DATE='$DATE'"
 
-# Check vesta-php version
+# Checking installed vesta-php version
 if [ -e "/etc/redhat-release" ]; then
     eval $(rpm --queryformat="$rpm_format" -q vesta-php)
     DATE=$(date -d @$UTIME +%F)
@@ -70,17 +101,11 @@ else
     DATE=$(date -d @$pkg_date +"%F")
     TIME=$(date -d @$pkg_date +"%T")
 fi
-latest=$(grep php $tmp_file)
-UPDATED='yes'
-if [ ! -z "$latest" ] && [ "$latest" != "php-$VERSION-$RELEASE" ]; then
-    UPDATED='no'
-    set_upd_flag='yes'
-fi
-str="$str\nNAME='vesta-php' VERSION='$VERSION' RELEASE='$RELEASE' ARCH='$ARCH'"
-str="$str UPDATED='$UPDATED' DESCR='php interpreter' TIME='$TIME'"
-str="$str DATE='$DATE'"
+data="$data\nNAME='vesta-php' VERSION='$VERSION' RELEASE='$RELEASE'"
+data="$data ARCH='$ARCH' UPDATED='$UPDATED' DESCR='php interpreter'"
+data="$data TIME='$TIME' DATE='$DATE'"
 
-# Check vesta-nginx version
+# Checking installed vesta-nginx version
 if [ -e "/etc/redhat-release" ]; then
     eval $(rpm --queryformat="$rpm_format" -q vesta-nginx)
     DATE=$(date -d @$UTIME +%F)
@@ -94,39 +119,19 @@ else
     DATE=$(date -d @$pkg_date +"%F")
     TIME=$(date -d @$pkg_date +"%T")
 fi
-latest=$(grep nginx $tmp_file)
-UPDATED='yes'
-if [ ! -z "$latest" ] && [ "$latest" != "nginx-$VERSION-$RELEASE" ]; then
-    UPDATED='no'
-    set_upd_flag='yes'
-fi
-str="$str\nNAME='vesta-nginx' VERSION='$VERSION' RELEASE='$RELEASE'"
-str="$str ARCH='$ARCH' UPDATED='$UPDATED' DESCR='internal web server'"
-str="$str TIME='$TIME' DATE='$DATE'"
-
-# Create flag if updates avaiable
-if [ "$set_upd_flag" == 'yes' ]; then
-    touch $VESTA/web/.update
-    chmod a+r $VESTA/web/.update
-fi
-
-# Defining config
-echo -e "$str" > $tmp_file
-conf=$tmp_file
+data="$data\nNAME='vesta-nginx' VERSION='$VERSION' RELEASE='$RELEASE'"
+data="$data ARCH='$ARCH' UPDATED='$UPDATED' DESCR='internal web server'"
+data="$data TIME='$TIME' DATE='$DATE'"
 
-# Defining fileds to select
-fields="\$NAME \$VERSION \$RELEASE \$ARCH \$UPDATED \$DESCR \$TIME \$DATE"
 
-# Listing services
+# Listing data
 case $format in
     json)   json_list ;;
-    plain)  nohead=1; shell_list ;;
-    shell)  fields='$NAME $VERSION $RELEASE $ARCH $UPDATED $TIME $DATE'
-            shell_list | column -t ;;
-    *)      check_args '1' '0' 'USER [FORMAT]'
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t;;
 esac
 
-rm -f $tmp_file
 
 #----------------------------------------------------------#
 #                       Vesta                              #

+ 142 - 59
bin/v-list-user

@@ -1,57 +1,151 @@
 #!/bin/bash
-# info: list system user
+# info: list user parameters
 # options: USER [FORMAT]
 #
-# The function for obtaining the list of all user's parameters.
+# The function to obtain user parameters.
 
 
 #----------------------------------------------------------#
 #                    Variable&Function                     #
 #----------------------------------------------------------#
 
-# Includes
-source $VESTA/func/main.sh
-
 # Argument definition
 user=$1
-USER="$user"
 format=${2-shell}
 
-# Json function
-json_list_user() {
-    i=1
-    fileds_count=$(echo "$fields" | wc -w)
-    source $VESTA/data/users/$user/user.conf
-    echo '{'
-    for field in $fields; do
-        eval value=$field
-        if [ "$i" -eq 1 ]; then
-            echo -e "\t\"$value\": {"
-        else
-            if [ "$fileds_count" -eq "$i" ]; then
-                echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
-            else
-                echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
-            fi
-        fi
-        (( ++i))
-    done
-    if [ -n "$value" ]; then
-        echo -e '        }'
-    fi
-    echo -e "}"
+# Includes
+source $VESTA/func/main.sh
+
+# JSON list function
+json_list() {
+        echo '{
+    "'$USER'": {
+        "FNAME": "'$FNAME'",
+        "LNAME": "'$LNAME'",
+        "PACKAGE": "'$PACKAGE'",
+        "WEB_TEMPLATE": "'$WEB_TEMPLATE'",
+        "BACKEND_TEMPLATE": "'$BACKEND_TEMPLATE'",
+        "PROXY_TEMPLATE": "'$PROXY_TEMPLATE'",
+        "DNS_TEMPLATE": "'$DNS_TEMPLATE'",
+        "WEB_DOMAINS": "'$WEB_DOMAINS'",
+        "WEB_ALIASES": "'$WEB_ALIASES'",
+        "DNS_DOMAINS": "'$DNS_DOMAINS'",
+        "DNS_RECORDS": "'$DNS_RECORDS'",
+        "MAIL_DOMAINS": "'$MAIL_DOMAINS'",
+        "MAIL_ACCOUNTS": "'$MAIL_ACCOUNTS'",
+        "DATABASES": "'$DATABASES'",
+        "CRON_JOBS": "'$CRON_JOBS'",
+        "DISK_QUOTA": "'$DISK_QUOTA'",
+        "BANDWIDTH": "'$BANDWIDTH'",
+        "HOME": "'$HOME'",
+        "NS": "'$NS'",
+        "SHELL": "'$SHELL'",
+        "BACKUPS": "'$BACKUPS'",
+        "CONTACT": "'$CONTACT'",
+        "CRON_REPORTS": "'$CRON_REPORTS'",
+        "RKEY": "'$RKEY'",
+        "SUSPENDED": "'$SUSPENDED'",
+        "SUSPENDED_USERS": "'$SUSPENDED_USERS'",
+        "SUSPENDED_WEB": "'$SUSPENDED_WEB'",
+        "SUSPENDED_DNS": "'$SUSPENDED_DNS'",
+        "SUSPENDED_MAIL": "'$SUSPENDED_MAIL'",
+        "SUSPENDED_DB": "'$SUSPENDED_DB'",
+        "SUSPENDED_CRON": "'$SUSPENDED_CRON'",
+        "IP_AVAIL": "'$IP_AVAIL'",
+        "IP_OWNED": "'$IP_OWNED'",
+        "U_USERS": "'$U_USERS'",
+        "U_DISK": "'$U_DISK'",
+        "U_DISK_DIRS": "'$U_DISK_DIRS'",
+        "U_DISK_WEB": "'$U_DISK_WEB'",
+        "U_DISK_MAIL": "'$U_DISK_MAIL'",
+        "U_DISK_DB": "'$U_DISK_DB'",
+        "U_BANDWIDTH": "'$U_BANDWIDTH'",
+        "U_WEB_DOMAINS": "'$U_WEB_DOMAINS'",
+        "U_WEB_SSL": "'$U_WEB_SSL'",
+        "U_WEB_ALIASES": "'$U_WEB_ALIASES'",
+        "U_DNS_DOMAINS": "'$U_DNS_DOMAINS'",
+        "U_DNS_RECORDS": "'$U_DNS_RECORDS'",
+        "U_MAIL_DOMAINS": "'$U_MAIL_DOMAINS'",
+        "U_MAIL_DKIM": "'$U_MAIL_DKIM'",
+        "U_MAIL_ACCOUNTS": "'$U_MAIL_ACCOUNTS'",
+        "U_DATABASES": "'$U_DATABASES'",
+        "U_CRON_JOBS": "'$U_CRON_JOBS'",
+        "U_BACKUPS": "'$U_BACKUPS'",
+        "LANGUAGE": "'$LANGUAGE'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+        }
+}'
 }
 
-# Shell function
-shell_list_user() {
-    source $VESTA/data/users/$user/user.conf
-    for field in $fields; do
-        eval key="$field"
-        if [ -z "$key" ]; then
-            key='NULL'
-        fi
-        echo "${field//$/}: $key "
-    done
+# SHELL list function
+shell_list() {
+    echo "USERNAME:       $USER"
+    echo "FULL NAME:      $FNAME $LNAME"
+    echo "EMAIL:          $CONTACT"
+    echo "LANGUAGE:       $LANGUAGE"
+    echo "SUSPENDED:      $SUSPENDED"
+    echo "PACKAGE:        $PACKAGE"
+    echo "SHELL:          $SHELL"
+    echo "WEB DOMAINS:    $U_WEB_DOMAINS/$WEB_DOMAINS"
+    echo "WEB ALIASES:    $U_WEB_ALIASES/$WEB_ALIASES"
+    echo "DNS DOMAINS:    $U_DNS_DOMAINS/$DNS_DOMAINS"
+    echo "DNS RECORDS:    $U_DNS_RECORDS/$DNS_RECORDS"
+    echo "MAIL DOMAINS:   $U_MAIL_DOMAINS/$MAIL_DOMAINS"
+    echo "MAIL ACCOUNTS:  $U_MAIL_ACCOUNTS/$MAIL_ACCOUNTS"
+    echo "BACKUPS:        $U_BACKUPS/$BACKUPS"
+    echo "DATABASES:      $U_DATABASES/$DATABASES"
+    echo "CRON_JOBS:      $U_CRON_JOBS/$CRON_JOBS"
+    echo "DISK:           $U_DISK/$DISK_QUOTA"
+    echo "BANDWIDTH:      $U_BANDWIDTH/$BANDWIDTH"
+    echo "IP ADDRESSES    $IP_AVAIL/$IP_OWNED"
+    echo "TIME:           $TIME"
+    echo "DATE:           $DATE"
+}
+
+# PLAIN list function
+plain_list() {
+    echo -ne "$USER\t$FNAME\t$LNAME\t$PACKAGE\t$WEB_TEMPLATE\t"
+    echo -ne "$BACKEND_TEMPLATE\t$PROXY_TEMPLATE\t$DNS_TEMPLATE\t"
+    echo -ne "$WEB_DOMAINS\t$WEB_ALIASES\t$DNS_DOMAINS\t$DNS_RECORDS\t"
+    echo -ne "$MAIL_DOMAINS\t$MAIL_ACCOUNTS\t$DATABASES\t$CRON_JOBS\t"
+    echo -ne "$DISK_QUOTA\t$BANDWIDTH\t$NS\t$HOME\t$SHELL\t$BACKUPS\t"
+    echo -ne "$CONTACT\t$CRON_REPORTS\t$RKEY\t$SUSPENDED\t"
+    echo -ne "$SUSPENDED_USERS\t$SUSPENDED_WEB\t$SUSPENDED_DNS\t"
+    echo -ne "$SUSPENDED_MAIL\t$SUSPENDED_DB\t$SUSPENDED_CRON\t"
+    echo -ne "$IP_AVAIL\t$IP_OWNED\t$U_USERS\t$U_DISK\t$U_DISK_DIRS\t"
+    echo -ne "$U_DISK_WEB\t$U_DISK_MAIL\t$U_DISK_DB\t$U_BANDWIDTH\t"
+    echo -ne "$U_WEB_DOMAINS\t$U_WEB_SSL\t$U_WEB_ALIASES\t"
+    echo -ne "$U_DNS_DOMAINS\t$U_DNS_RECORDS\t$U_MAIL_DOMAINS\t"
+    echo -ne "$U_MAIL_DKIM\t$U_MAIL_ACCOUNTS\t$U_DATABASES\t"
+    echo -e "'$U_CRON_JOBS\t$U_BACKUPS\t$LANGUAGE\t$TIME\t$DATE"
+}
+
+# CSV list function
+csv_list() {
+    echo -n "USER,FNAME,LNAME,PACKAGE,WEB_TEMPLATE,BACKEND_TEMPLATE,"
+    echo -n "PROXY_TEMPLATE,DNS_TEMPLATE,WEB_DOMAINS,WEB_ALIASES,"
+    echo -n "DNS_DOMAINS,DNS_RECORDS,MAIL_DOMAINS,MAIL_ACCOUNTS,"
+    echo -n "DATABASES,CRON_JOBS,DISK_QUOTA,BANDWIDTH,NS,HOME,SHELL,"
+    echo -n "BACKUPS,CONTACT,CRON_REPORTS,RKEY,SUSPENDED,SUSPENDED_USERS,"
+    echo -n "SUSPENDED_WEB,SUSPENDED_DNS,SUSPENDED_MAIL,SUSPENDED_DB,"
+    echo -n "SUSPENDED_CRON,IP_AVAIL,IP_OWNED,U_USERS,U_DISK,U_DISK_DIRS,"
+    echo -n "U_DISK_WEB,U_DISK_MAIL,U_DISK_DB,U_BANDWIDTH,U_WEB_DOMAINS,"
+    echo -n "U_WEB_SSL,U_WEB_ALIASES,U_DNS_DOMAINS,U_DNS_RECORDS,"
+    echo -n "U_MAIL_DOMAINS,U_MAIL_DKIM,U_MAIL_ACCOUNTS,U_DATABASES"
+    echo "U_CRON_JOBS,U_BACKUPS,LANGUAGE,TIME,DATE"
+    echo -n "$USER,\"$FNAME\",\"$LNAME\",$PACKAGE,$WEB_TEMPLATE,"
+    echo -n "$BACKEND_TEMPLATE,$PROXY_TEMPLATE,$DNS_TEMPLATE,$WEB_DOMAINS,"
+    echo -n "$WEB_ALIASES,$DNS_DOMAINS,$DNS_RECORDS,$MAIL_DOMAINS,"
+    echo -n "$MAIL_ACCOUNTS,$DATABASES,$CRON_JOBS,$DISK_QUOTA,$BANDWIDTH,"
+    echo -n "\"$NS\",$HOME,$SHELL,$BACKUPS,$CONTACT,$CRON_REPORTS,\"$RKEY\","
+    echo -n "$SUSPENDED,$SUSPENDED_USERS,$SUSPENDED_WEB,$SUSPENDED_DNS,"
+    echo -n "$SUSPENDED_MAIL,$SUSPENDED_DB,$SUSPENDED_CRON,$IP_AVAIL,"
+    echo -n "$IP_OWNED,$U_USERS,$U_DISK,$U_DISK_DIRS,$U_DISK_WEB,"
+    echo -n "$U_DISK_MAIL,$U_DISK_DB,$U_BANDWIDTH,$U_WEB_DOMAINS,$U_WEB_SSL,"
+    echo -n "$U_WEB_ALIASES,$U_DNS_DOMAINS,$U_DNS_RECORDS,$U_MAIL_DOMAINS,"
+    echo -n "$U_MAIL_DKIM,$U_MAIL_ACCOUNTS,$U_DATABASES,$U_CRON_JOBS,"
+    echo "$U_BACKUPS,$LANGUAGE,$TIME,$DATE"
 }
 
 
@@ -60,7 +154,6 @@ shell_list_user() {
 #----------------------------------------------------------#
 
 check_args '1' "$#" 'USER [FORMAT]'
-validate_format 'user'
 is_object_valid 'user' 'USER' "$user"
 
 
@@ -69,26 +162,16 @@ is_object_valid 'user' 'USER' "$user"
 #----------------------------------------------------------#
 
 # Defining config
-conf=$USER_DATA/user.conf
+USER=$user
 HOME=$HOMEDIR/$user
-
-# Defining fileds to select
-fields='$USER $FNAME $LNAME $PACKAGE $WEB_TEMPLATE $BACKEND_TEMPLATE
-    $PROXY_TEMPLATE $DNS_TEMPLATE $WEB_DOMAINS $WEB_ALIASES $DNS_DOMAINS
-    $DNS_RECORDS $MAIL_DOMAINS $MAIL_ACCOUNTS $DATABASES $CRON_JOBS
-    $DISK_QUOTA $BANDWIDTH $NS $SHELL $BACKUPS $CONTACT $CRON_REPORTS
-    $RKEY $SUSPENDED $SUSPENDED_USERS $SUSPENDED_WEB $SUSPENDED_DNS
-    $SUSPENDED_MAIL $SUSPENDED_DB $SUSPENDED_CRON $IP_AVAIL $IP_OWNED
-    $U_USERS $U_DISK $U_DISK_DIRS $U_DISK_WEB $U_DISK_MAIL $U_DISK_DB
-    $U_BANDWIDTH $U_WEB_DOMAINS $U_WEB_SSL $U_WEB_ALIASES $U_DNS_DOMAINS
-    $U_DNS_RECORDS $U_MAIL_DOMAINS $U_MAIL_DKIM $U_MAIL_ACCOUNTS $U_DATABASES
-    $U_CRON_JOBS $U_BACKUPS $LANGUAGE $HOME $NOTIFICATIONS $TIME $DATE'
-
-# Listing user
-case $format in 
-    json)   json_list_user ;;
-    plain)  nohead=1; shell_list_user ;;
-    shell)  shell_list_user | column -t ;;
+source $VESTA/data/users/$user/user.conf
+
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 51 - 56
bin/v-list-user-backup

@@ -18,57 +18,55 @@ format=${3-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_backup() {
-    i=1
-    fileds_count=$(echo "$fields" | wc -w)
-    line=$(grep "BACKUP='$backup'" $conf)
+fields="\$BACKUP \$TYPE \$SIZE \$WEB \$DNS \$DB \$MAIL \$CRON \$UDIR"
+fields="$fields \$RUNTIME \$TIME \$DATE"
 
-    # Print top bracket
+# JSON list function
+json_list() {
     echo '{'
-
-    # Assing key=value
-    eval $line
-
-    # Starting output loop
-    for field in $fields; do
-        # Parsing key=value
-        eval value=$field
-
-        # Checking first field
-        if [ "$i" -eq 1 ]; then
-            echo -e "\t\"$value\": {"
-        else
-            if [ "$fileds_count" -eq "$i" ]; then
-                echo -e "\t\t\"${field//$/}\": \"$value\""
-            else
-                echo -e "\t\t\"${field//$/}\": \"$value\","
-            fi
-        fi
-        # Updating iterator
-        (( ++i))
-    done
-
-    # If there was any output
-    if [ -n "$value" ]; then
-        echo -e '        }'
-    fi
-    # Printing bottom json bracket
-    echo -e "}"
+    echo '    "'$BACKUP'": {
+        "TYPE": "'$TYPE'",
+        "SIZE": "'$SIZE'",
+        "WEB": "'$WEB'",
+        "DNS": "'$DNS'",
+        "MAIL": "'$MAIL'",
+        "DB": "'$DB'",
+        "CRON": "'$CRON'",
+        "UDIR": "'$UDIR'",
+        "RUNTIME": "'$RUNTIME'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+    echo '}'
 }
 
-# Shell function
-shell_list_backup() {
-    line=$(grep "BACKUP='$backup'" $conf)
+# SHELL list function
+shell_list() {
+    echo "BACKUP:         $BACKUP"
+    echo "TYPE:           $TYPE"
+    echo "SIZE:           $SIZE mb"
+    echo "RUNTIME:        $RUNTIME min"
+    echo "WEB:            ${WEB//,/ }"
+    echo "DNS:            ${DNS//,/ }"
+    echo "MAIL:           ${MAIL//,/ }"
+    echo "DB:             ${DB//,/ }"
+    echo "CRON:           $CRON"
+    echo "UDIR:           ${UDIR//,/ }"
+    echo "TIME:           $TIME"
+    echo "DATE:           $DATE"
+}
 
-    # Parsing key=value
-    eval $line
+# PLAIN list function
+plain_list() {
+    echo -ne "$BACKUP\t$TYPE\t$SIZE\t$WEB\t$DNS\t$MAIL\t$DB\t$CRON\t"
+    echo -e "$UDIR\t$RUNTIME\t$TIME\t$DATE"
+}
 
-    # Print result line
-    for field in $fields; do
-        eval key="$field"
-        echo "${field//$/}: $key "
-    done
+# CSV list function
+csv_list() {
+    echo "BACKUP,TYPE,SIZE,WEB,DNS,MAIL,DB,CRON,UDIR,RUNTIME,TIME,DATE"
+    echo -n "$BACKUP,$TYPE,$SIZE,\"$WEB\",\"$DNS\",\"$MAIL\",\"$DB\","
+    echo "\"$CRON\",\"$UDIR\",$RUNTIME,$TIME,$DATE"
 }
 
 
@@ -85,18 +83,15 @@ is_object_valid 'backup' 'BACKUP' "$backup"
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining config and fields to select
-conf=$USER_DATA/backup.conf
-
-fields="\$BACKUP \$TYPE \$SIZE \$WEB \$DNS \$DB \$MAIL \$CRON \$UDIR"
-fields="$fields \$RUNTIME \$TIME \$DATE"
+# Parsing backup config
+eval $(grep "BACKUP='$backup'" $USER_DATA/backup.conf)
 
-# Listing backup
-case $format in 
-    json)   json_list_backup ;;
-    plain)  nohead=1; shell_list_backup ;;
-    shell)  shell_list_backup |column -t ;;
-    *)      check_args '2' '0' 'USER BACKUP [FORMAT]'
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 122 - 41
bin/v-list-user-backup-exclusions

@@ -12,52 +12,134 @@
 # Argument definition
 user=$1
 format=${2-shell}
-USER=''
 
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_backup_xld() {
-    set -f
+# JSON list function
+json_list() {
+    i=1
     echo '{'
-    fields_count=$(echo "$fields" | wc -w)
+    echo '    "WEB": {'
+    objects=$(echo "${WEB//,/ }" |wc -w)
+    for object in $(echo "${WEB//,/ }"); do
+        j=1
+        object_keys=$(echo ${object//:/ } |wc -w)
+        for key in $(echo "${object/:/ }"); do
+            if [ "$j" -eq 1 ]; then
+                echo -n "        \"$key\": "
+                if [ "$object_keys" -eq 1 ]; then
+                    echo -n '""'
+                fi
+            else
+                echo -n "\"${key//:/,}\""
+            fi
+            ((j++))
+        done
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
+        else
+            echo
+        fi
+        ((i++))
+    done
+    echo '    },'
     i=1
-    source $USER_DATA/backup-excludes.conf
-    for field in $fields; do
-        eval value=$field
+    echo '    "MAIL": {'
+    objects=$(echo "${MAIL//,/ }" |wc -w)
+    for object in $(echo "${MAIL//,/ }"); do
         j=1
-        echo -e "\t\"${field//$/}\": {"
-        for exlcude in ${value//,/ }; do
-            exlcude_obj=$(echo $exlcude |cut -f 1 -d:)
-            exclude_param=$(echo $exlcude |sed -e "s/$exlcude_obj://")
-            if [ "$exlcude_obj" = "$exclude_param" ]; then
-                exclude_param=''
+        object_keys=$(echo ${object//:/ } |wc -w)
+        for key in $(echo "${object/:/ }"); do
+            if [ "$j" -eq 1 ]; then
+                echo -n "        \"$key\": "
+                if [ "$object_keys" -eq 1 ]; then
+                    echo -n '""'
+                fi
+            else
+                echo -n "\"${key//:/,}\""
             fi
-            if [ $j -lt "$(echo ${value//,/ } |wc -w)" ]; then
-                echo -e "\t\t\"$exlcude_obj\": \"$exclude_param\","
+            ((j++))
+        done
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
+        else
+            echo
+        fi
+        ((i++))
+    done
+    echo '    },'
+    i=1
+    echo '    "DB": {'
+    objects=$(echo "${DB//,/ }" |wc -w)
+    for object in $(echo "${DB//,/ }"); do
+        j=1
+        object_keys=$(echo ${object//:/ } |wc -w)
+        for key in $(echo "${object/:/ }"); do
+            if [ "$j" -eq 1 ]; then
+                echo -n "        \"$key\": "
+                if [ "$object_keys" -eq 1 ]; then
+                    echo -n '""'
+                fi
             else
-                echo -e "\t\t\"$exlcude_obj\": \"$exclude_param\""
+                echo -n "\"${key//:/,}\""
             fi
-            (( ++j))
+            ((j++))
         done
-        if [ $i -lt $fields_count ]; then
-            echo -e "\t},"
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
         else
-            echo -e "\t}"
+            echo
         fi
-        (( ++i))
+        ((i++))
     done
+    echo '    },'
+    i=1
+    echo '    "USER": {'
+    objects=$(echo "${USER//,/ }" |wc -w)
+    for object in $(echo "${USER//,/ }"); do
+        j=1
+        object_keys=$(echo ${object//:/ } |wc -w)
+        for key in $(echo "${object/:/ }"); do
+            if [ "$j" -eq 1 ]; then
+                echo -n "        \"$key\": "
+                if [ "$object_keys" -eq 1 ]; then
+                    echo -n '""'
+                fi
+            else
+                echo -n "\"${key//:/,}\""
+            fi
+            ((j++))
+        done
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
+        else
+            echo
+        fi
+        ((i++))
+    done
+    echo '    }'
     echo '}'
+
 }
 
-# Shell function
-shell_list_backup_xld() {
-    source $USER_DATA/backup-excludes.conf
-    for field in $fields; do
-        eval value=$field
-        echo -e "${field//$/}: $value"
-    done
+# SHELL list function
+shell_list() {
+    echo "WEB:            $WEB"
+    echo "MAIL:           $MAIL"
+    echo "DB:             $DB"
+    echo "USER DIRS:      $USER"
+}
+
+# PLAIN list function
+plain_list() {
+    echo  "$WEB\t$MAIL\t$DB\t$USER"
+}
+
+# CSV list function
+csv_list() {
+    echo "WEB,MAIL,DB,USER"
+    echo "\"$WEB\",\"$MAIL\",\"$DB\",\"$USER\""
 }
 
 
@@ -66,7 +148,7 @@ shell_list_backup_xld() {
 #----------------------------------------------------------#
 
 check_args '1' "$#" 'USER [FORMAT]'
-validate_format 'user'
+is_format_valid 'user'
 is_object_valid 'user' 'USER' "$user"
 
 
@@ -74,24 +156,23 @@ is_object_valid 'user' 'USER' "$user"
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Flush variables
+# Flushing variables
 WEB=''
-DNS=''
 MAIL=''
 DB=''
-CRON=''
 USER=''
 
-# Defining fileds to select
-touch $USER_DATA/backup-excludes.conf
-fields="\$WEB \$DNS \$MAIL \$DB \$CRON \$USER"
+# Parsing backup exclusion list
+if [ -e "$USER_DATA/backup-excludes.conf" ]; then
+    source $USER_DATA/backup-excludes.conf
+fi
 
-# Listing backup exclusions
+# Listing data
 case $format in
-    json)   json_list_backup_xld ;;
-    plain)  nohead=1; shell_list_backup_xld ;;
-    shell)  shell_list_backup_xld;;
-    *)      check_args '1' '0' '[FORMAT]'
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 70 - 11
bin/v-list-user-backups

@@ -16,12 +16,76 @@ format=${2-shell}
 # Includes
 source $VESTA/func/main.sh
 
+# JSON list function
+json_list() {
+    IFS=$'\n'
+    i=1
+    objects=$(grep BACKUP $USER_DATA/backup.conf |wc -l)
+    echo "{"
+    while read str; do
+        eval $str
+        echo -n '    "'$BACKUP'": {
+        "TYPE": "'$TYPE'",
+        "SIZE": "'$SIZE'",
+        "WEB": "'$WEB'",
+        "DNS": "'$DNS'",
+        "MAIL": "'$MAIL'",
+        "DB": "'$DB'",
+        "CRON": "'$CRON'",
+        "UDIR": "'$UDIR'",
+        "RUNTIME": "'$RUNTIME'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
+        else
+            echo
+        fi
+        ((i++))
+    done < <(cat $USER_DATA/backup.conf)
+    echo '}'
+}
+
+# SHELL list function
+shell_list() {
+    IFS=$'\n'
+    echo "BACKUP   TYPE   SIZE  TIME  DATE"
+    echo "------   ----   ---   ----  ----"
+    while read str; do
+        eval $str
+        echo "$BACKUP $TYPE $SIZE $RUNTIME $DATE"
+    done < <(cat $USER_DATA/backup.conf)
+}
+
+# PLAIN list function
+plain_list() {
+    IFS=$'\n'
+    while read str; do
+        eval $str
+        echo -ne "$BACKUP\t$TYPE\t$SIZE\t$WEB\t$DNS\t$MAIL\t$CRON\t$UDIR\t"
+        echo -e "$RUNTIME\t$TIME\t$DATE"
+    done < <(cat $USER_DATA/backup.conf)
+}
+
+# CSV list function
+csv_list() {
+    IFS=$'\n'
+    echo "BACKUP,TYPE,SIZE,WEB,DNS,MAIL,CRON,UDIR,RUNTIME,TIME,DATE"
+    while read str; do
+        eval $str
+        echo -n "$BACKUP,$TYPE,$SIZE,\"$WEB\",\"$DNS\",\"$MAIL\",\"$CRON\","
+        echo "\"$UDIR\",$RUNTIME,$TIME,$DATE"
+    done < <(cat $USER_DATA/backup.conf)
+}
+
+
 #----------------------------------------------------------#
 #                    Verifications                         #
 #----------------------------------------------------------#
 
 check_args '1' "$#" 'USER [FORMAT]'
-validate_format 'user'
+is_format_valid 'user'
 is_object_valid 'user' 'USER' "$user"
 
 
@@ -35,17 +99,12 @@ if [ ! -e "$conf" ]; then
     touch $conf
 fi
 
-# Defining fileds to select
-fields="\$BACKUP \$TYPE \$SIZE \$WEB \$DNS \$DB \$MAIL \$CRON \$UDIR"
-fields="$fields \$RUNTIME \$TIME \$DATE"
-
-# Listing domains
-case $format in 
+# Listing data
+case $format in
     json)   json_list ;;
-    plain)  nohead=1; shell_list ;;
-    shell)  fields='$BACKUP $TYPE $SIZE $RUNTIME $TIME $DATE';
-            shell_list |column -t;;
-    *)      check_args '1' '0' '[FORMAT]' ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t ;;
 esac
 
 

+ 56 - 44
bin/v-list-user-favourites

@@ -16,43 +16,55 @@ format=${2-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_favourites() {
-    i=1
-    fileds_count=$(echo "$fields" | wc -w)
-    fvrt_data=$(cat $USER_DATA/favourites.conf 2>/dev/null)
+# JSON list function
+json_list() {
     echo '{'
-    eval $fvrt_data
-    for field in $fields; do
-        eval value=$field
-        if [ $i -eq 1 ]; then
-            echo -e "\t\"$value\": {"
-        else
-            if [ $fileds_count -eq $i ]; then
-                echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
-            else
-                echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
-            fi
-        fi
-    (( ++i))
-    done
-    #if [ -n "$value" ]; then
-        echo -e '        }'
-    #fi
-    echo -e '}'
+    echo '    "Favourites": {
+        "USER": "'$USER'",
+        "WEB": "'$WEB'",
+        "DNS": "'$DN'",
+        "DNS_REC": "'$DNS_REC'",
+        "MAIL": "'$MAIL'",
+        "MAIL_ACC": "'$MAIL_ACC'",
+        "DB": "'$DB'",
+        "CRON": "'$CRON'",
+        "BACKUP": "'$BACKUP'",
+        "IP": "'$IP'",
+        "PACKAGE": "'$PACKAGE'",
+        "FIREWALL": "'$FIREWALL'"
+        }'
+    echo '}'
 }
 
-# Shell function
-shell_list_favourites() {
-    line=$(cat $USER_DATA/favourites.conf 2>/dev/null)
-    eval $line
-    for field in $fields; do
-        eval key="$field"
-        if [ -z "$key" ]; then
-            key='NULL'
-        fi
-        echo "${field//$/}: $key "
-    done
+# SHELL list function
+shell_list() {
+    echo "USER:           $USER"
+    echo "WEB:            $WEB"
+    echo "DNS:            $DNS"
+    echo "DNS RECORD:     $DNS_REC"
+    echo "MAIL:           $MAIL"
+    echo "MAIL USER:      $MAIL_ACC"
+    echo "DATABASE:       $DB"
+    echo "CRON:           $CRON"
+    echo "BACKUP:         $BACKUP"
+    echo "IP:             $IP"
+    echo "PACKAGE:        $PACKAGE"
+    echo "FIREWALL:       $FIREWALL"
+}
+
+# PLAIN list function
+plain_list() {
+    echo -ne "$USER\t$WEB\t$DNS\t$DNS_REC\t$MAIL\t$MAIL_ACC\t$DB\t$CRON\t"
+    echo -e "$BACKUP\t$IP\t$PACKAGE\t$FIREWALL"
+}
+
+# CSV list function
+csv_list() {
+    echo -n "USER,WEB,DNS,DNS_REC,MAIL,MAIL_ACC,DB,CRON,BACKUP,IP,"
+    echo "PACKAGE,FIREWALL"
+    echo -n "\"$USER\",\"$WEB\",\"$DNS\",\"$DNS_REC\",\"$MAIL\","
+    echo -n "\"$MAIL_ACC\",\"$DB\",\"$CRON\",\"$BACKUP\",\"$IP\","
+    echo "\"$PACKAGE\",\"$FIREWALL\""
 }
 
 
@@ -62,7 +74,7 @@ shell_list_favourites() {
 
 # Checking args
 check_args '1' "$#" 'USER [FORMAT]'
-validate_format 'user'
+is_format_valid 'user'
 is_object_valid 'user' 'USER' "$user"
 
 
@@ -84,17 +96,17 @@ IP=''
 PACKAGE=''
 FIREWALL=''
 
-# Defining fileds to select
-OBJ='Favourites'
-fields='$OBJ $USER $WEB $DNS $DNS_REC $MAIL $MAIL_ACC $DB $CRON $BACKUP
-    $IP $PACKAGE $FIREWALL'
+# Parsing user favourites
+if [ -e "$VESTA/data/users/$user/favourites.conf" ]; then
+    source $VESTA/data/users/$user/favourites.conf
+fi
 
-# Listing favourites
+# Listing data
 case $format in
-    json)   json_list_favourites ;;
-    plain)  shell_list_favourites ;;
-    shell)  shell_list_favourites | column -t ;;
-    *)      check_args '1' '0' 'USER [FORMAT]'
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 56 - 79
bin/v-list-user-ips

@@ -16,89 +16,59 @@ format=${2-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_user_ips() {
+# JSON list function
+json_list() {
     echo '{'
-    fileds_count=$(echo "$fields" | wc -w)
-    for IP in $(ls $VESTA/data/ips/); do
+    ip_count=$(echo "$ips" |wc -l)
+    i=1
+    for IP in $ips; do
         source $VESTA/data/ips/$IP
-        if [ "$OWNER" = "$user" ]; then
-            if [ -n "$data" ]; then
-                echo -e '        },'
-            fi
-            i=1
-            for field in $fields; do
-                eval value=$field
-                if [ $i -eq 1 ]; then
-                    (( ++i))
-                    echo -e "\t\"$value\": {"
-                else
-                    if [ $i -lt $fileds_count ]; then
-                        (( ++i))
-                        echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
-                    else
-                        echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
-                        data=1
-                    fi
-                fi
-            done
+        echo -n '    "'$IP'": {
+        "OWNER": "'$OWNER'",
+        "STATUS": "'$STATUS'",
+        "NAME": "'$NAME'",
+        "NAT": "'$NAT'"
+        }'
+        if [ "$i" -lt "$ip_count" ]; then
+            echo ','
         else
-            if  [ "$OWNER" = 'admin' ] && [ "$STATUS" = 'shared' ]; then
-                if [ -n "$data" ]; then
-                    echo -e '        },'
-                fi
-                i=1
-
-                for field in $fields; do
-                    eval value=$field
-                    if [ $i -eq 1 ]; then
-                        (( ++i))
-                        echo -e "\t\"$value\": {"
-                    else
-                        if [ $i -lt $fileds_count ]; then
-                            (( ++i))
-                            echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
-                        else
-                            echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
-                            data=1
-                        fi
-                    fi
-                done
-            fi
+            echo
+        fi
+        ((i++))
+    done
+    echo '}'
+}
+
+# SHELL list function
+shell_list() {
+    echo "IP  NAT  OWNER   STATUS   NAME"
+    echo "--  ---  -----   ------   ---"
+    for IP in $ips; do
+        source $VESTA/data/ips/$IP
+        if [ -z "$NAT" ]; then
+            NAT='no'
         fi
+        if [ -z "$NAME" ]; then
+            NAME='no'
+        fi
+        echo "$IP $NAT $OWNER $STATUS $NAME"
     done
-    if [ -n "$data" ]; then
-        echo -e '        }'
-    fi
-    echo -e '}'
+}
 
+# PLAIN list function
+plain_list() {
+    for IP in $ips; do
+        source $VESTA/data/ips/$IP
+        echo -e "$IP\t$OWNER\t$STATUS\t$NAME\t$NAT"
+    done
 }
 
-# Shell function
-shell_list_user_ips() {
+# CSV list function
+csv_list() {
+    echo "IP,OWNER,STATUS,NAME,NAT"
     for IP in $(ls $VESTA/data/ips/); do
         source $VESTA/data/ips/$IP
-        if [ "$OWNER" = "$user" ]; then
-            for field in $fields; do
-                eval value=$field
-                if [ -z "$value" ]; then
-                    value='NULL'
-                fi
-                echo -n "$value "
-            done
-            echo
-        else
-            if  [ "$OWNER" = 'admin' ] && [ "$STATUS" = 'shared' ]; then
-                for field in $fields; do
-                    eval value=$field
-                    if [ -z "$value" ]; then
-                        value='NULL'
-                    fi
-                    echo -n "$value "
-                done
-                echo
-            fi
-        fi
+        echo "$IP,$OWNER,$STATUS,$NAME,$NAT"
     done
 }
 
@@ -108,7 +78,7 @@ shell_list_user_ips() {
 #----------------------------------------------------------#
 
 check_args '1' "$#" 'USER [FORMAT]'
-validate_format 'user'
+is_format_valid 'user'
 is_object_valid 'user' 'USER' "$user"
 
 
@@ -117,14 +87,21 @@ is_object_valid 'user' 'USER' "$user"
 #----------------------------------------------------------#
 
 # Defining fileds to select
+owner='admin'
+owner_ips=$(grep -A 1 "OWNER='$owner'" $VESTA/data/ips/*)
+owner_ips=$(echo "$owner_ips" |grep "STATUS='shared'")
+owner_ips=$(echo "$owner_ips" |cut -f 7 -d / |cut -f 1 -d -)
+user_ips=$(grep "OWNER='$user'" $VESTA/data/ips/*)
+user_ips=$(echo "$user_ips" |cut -f 7 -d / |cut -f 1 -d :)
+ips=$(echo -e "$user_ips\n$owner_ips" |sort -u |sed "/^$/d")
 fields='$IP $OWNER $STATUS $NAME $NAT'
 
-# Listing ips
+# Listing data
 case $format in
-    json)   json_list_user_ips ;;
-    plain)  nohead=1; shell_list_user_ips ;;
-    shell)  shell_list_user_ips | column -t ;;
-    *)      check_args '1' '0' 'USER [FORMAT]' ;;
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t ;;
 esac
 
 

+ 63 - 45
bin/v-list-user-log

@@ -16,48 +16,71 @@ format=${2-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json func
-json_list_history() {
-    echo '{'
-    fileds_count=$(echo $fields| wc -w )
-    while read line; do
-        IFS=$'\n'
-        eval $line
-        if [ -n "$data" ]; then
-            echo -e '        },'
+# JSON list function
+json_list() {
+    IFS=$'\n'
+    i=1
+    objects=$(echo "$logs" |wc -l)
+    echo "{"
+    for str in $logs; do
+        eval $str
+        echo -n '    "'$ID'": {
+        "CMD": "'$CMD'",
+        "UNDO": "'$UNDO'",
+        "DATE": "'$DATE'",
+        "DATE": "'$DATE'"
+    }'
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
+        else
+            echo
         fi
-        i=1
-        IFS=' '
-        for field in $fields; do
-            eval value=\"$field\"
-            value=$(echo "$value" | sed -e 's/"/\\"/g' -e "s/%quote%/'/g")
-            if [ $i -eq 1 ]; then
-                (( ++i))
-                echo -e "\t\"$value\": {"
-            else
-                if [ $i -lt $fileds_count ]; then
-                    (( ++i))
-                    echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
-                else
-                    echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
-                    data=1
-                fi
-            fi
-        done
-    done < $conf
-    if [ -n "$data" ]; then
-        echo -e '        }'
-    fi
-    echo -e '}'
+        ((i++))
+    done
+    echo '}'
 }
 
+shell_list() {
+    IFS=$'\n'
+    echo "DATE~TIME~CMD"
+    echo "----~----~---"
+    for str in $logs; do
+        eval $str
+        if [ -z "$DATE" ]; then
+            DATE='no'
+        fi
+        if [ -z "$TIME" ]; then
+            TIME='no'
+        fi
+        echo "$DATE~$TIME~$CMD"
+    done
+}
+
+# PLAIN list function
+plain_list() {
+    IFS=$'\n'
+    for str in $logs; do
+        eval $str
+        echo -e "$ID\t$CMD\t$UNDO\t$TIME\t$DATE"
+    done
+}
+
+# CSV list function
+csv_list() {
+    IFS=$'\n'
+    echo "ID,CMD,UNDO,TIME,DATE"
+    for str in $logs; do
+        eval $str
+        echo "$ID,\"$CMD\",\"$UNDO\",$TIME,$DATE"
+    done
+}
 
 #----------------------------------------------------------#
 #                    Verifications                         #
 #----------------------------------------------------------#
 
 check_args '1' "$#" 'USER [FORMAT]'
-validate_format 'user'
+is_format_valid 'user'
 is_object_valid 'user' 'USER' "$user"
 
 
@@ -65,19 +88,14 @@ is_object_valid 'user' 'USER' "$user"
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining config
-conf=$USER_DATA/history.log
-
-# Defining fileds to select
-fields="\$ID \$DATE \$TIME \$CMD \$UNDO"
+# Parsing history log
+logs=$(tail -n 300 $USER_DATA/history.log 2>/dev/null)
 
-# Listing domains
-case $format in 
-    json)   json_list_history ;;
-    plain)  nohead=1; shell_list ;;
-    shell)  fields='$ID~$DATE~$TIME~$CMD';
-            shell_list |column -t -s '~';;
-    *)      check_args '1' '0' 'USER [FORMAT]'
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t -s '~';;
 esac
 
 

+ 61 - 46
bin/v-list-user-notifications

@@ -16,50 +16,69 @@ format=${2-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_notifications() {
-    echo '{'
-    fileds_count=$(echo $fields| wc -w )
-    while read line; do
-        eval $line
-        if [ -n "$data" ]; then
-            echo -e '        },'
+# JSON list function
+json_list() {
+    IFS=$'\n'
+    i=1
+    objects=$(grep NID $USER_DATA/notifications.conf |wc -l)
+    echo "{"
+    while read str; do
+        eval $str
+        TOPIC=$(echo "$TOPIC" |sed -e "s/%quote%/'/g")
+        NOTICE=$(echo "$NOTICE" |sed -e "s/%quote%/'/g")
+        echo -n '    "'$NID'": {
+        "TOPIC": "'$TOPIC'",
+        "NOTICE": "'$NOTICE'",
+        "TYPE": "'$TYPE'",
+        "ACK": "'$ACK'",
+        "TPL": "'$TPL'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
+        else
+            echo
         fi
-        i=1
-        IFS=' '
-        for field in $fields; do
-            eval value=\"$field\"
-            value=$(echo "$value"|sed -e 's/"/\\"/g' -e "s/%quote%/'/g")
-            if [ $i -eq 1 ]; then
-                (( ++i))
-                echo -e "\t\"$value\": {"
-            else
-                if [ $i -lt $fileds_count ]; then
-                    (( ++i))
-                    echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
-                else
-                    echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
-                    data=1
-                fi
-            fi
-        done
-    done < $conf
-    if [ -n "$data" ]; then
-        echo -e '        }'
-    fi
-    echo -e '}'
+        ((i++))
+    done < <(cat $USER_DATA/notifications.conf)
+    echo '}'
 }
 
-# Shell function
-shell_list_notifications() {
-    while read line ; do
-        eval $line
+# SHELL list function
+shell_list() {
+    IFS=$'\n'
+    while read str; do
+        eval $str
         echo "$TOPIC" |sed -e "s/%quote%/'/g"
         echo "$NOTICE" |sed -e "s/%quote%/'/g"
         echo "$DATE $TIME"
         echo "--"
         echo
-    done < $conf
+    done < <(cat $USER_DATA/notifications.conf)
+}
+
+# PLAIN list function
+plain_list() {
+    IFS=$'\n'
+    while read str; do
+        eval $str
+        TOPIC=$(echo "$TOPIC" |sed -e "s/%quote%/'/g")
+        NOTICE=$(echo "$NOTICE" |sed -e "s/%quote%/'/g")
+        echo -e "$NID\t$TOPIC\t$NOTICE\t$TIME\t$DATE"
+    done < <(cat $USER_DATA/notifications.conf)
+}
+
+# CSV list function
+csv_list() {
+    IFS=$'\n'
+    echo "NID,TOPIC,NOTICE,TIME,DATE"
+    while read str; do
+        eval $str
+        TOPIC=$(echo "$TOPIC" |sed -e "s/%quote%/'/g")
+        NOTICE=$(echo "$NOTICE" |sed -e "s/%quote%/'/g")
+        echo "$NID,\"$TOPIC\",\"$NOTICE\",$TIME,$DATE"
+    done < <(cat $USER_DATA/notifications.conf)
 }
 
 
@@ -69,7 +88,7 @@ shell_list_notifications() {
 
 # Checking args
 check_args '1' "$#" 'USER [FORMAT]'
-validate_format 'user'
+is_format_valid 'user'
 is_object_valid 'user' 'USER' "$user"
 
 
@@ -77,16 +96,12 @@ is_object_valid 'user' 'USER' "$user"
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining fileds to select
-conf=$USER_DATA/notifications.conf
-fields='$NID $TOPIC $NOTICE $TYPE $ACK $TIME $DATE'
-
-# Listing favourites
+# Listing data
 case $format in
-    json)   json_list_notifications ;;
-    plain)  shell_list_notifications ;;
-    shell)  shell_list_notifications  ;;
-    *)      check_args '1' '0' 'USER [FORMAT]'
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 35 - 21
bin/v-list-user-ns

@@ -16,30 +16,41 @@ format=${2-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_ns() {
-    ns=$(grep "^NS='" $USER_DATA/user.conf |cut -f 2 -d \')
-    echo '['
+# JSON list function
+json_list() {
     i=1
-    nslistc=$(echo -e "${ns//,/\\n}"|wc -l)
+    objects=$(echo -e "${ns//,/\\n}" |wc -l)
+    echo '['
     for nameserver in ${ns//,/ };do
-        if [ "$i" -ne "$nslistc" ]; then
+        if [ "$i" -ne "$objects" ]; then
             echo -e  "\t\"$nameserver\","
         else
             echo -e  "\t\"$nameserver\""
         fi
         (( ++i))
     done
-    echo "]"
+    echo ']'
 }
 
-# Shell function
-shell_list_ns() {
-    ns=$(grep "^NS='" $USER_DATA/user.conf |cut -f 2 -d \')
-    if [ -z "$nohead" ]; then
-        echo "NAMESERVER"
-        echo "----------"
-    fi
+# SHELL list function
+shell_list() {
+    echo "NS"
+    echo "--"
+    for nameserver in ${ns//,/ };do
+        echo "$nameserver"
+    done
+}
+
+# PLAIN list function
+plain_list() {
+    for nameserver in ${ns//,/ };do
+        echo "$nameserver"
+    done
+}
+
+# CSV list function
+csv_list() {
+    echo "NAMESERVER"
     for nameserver in ${ns//,/ };do
         echo "$nameserver"
     done
@@ -51,7 +62,7 @@ shell_list_ns() {
 #----------------------------------------------------------#
 
 check_args '1' "$#" 'USER [FORMAT]'
-validate_format 'user'
+is_format_valid 'user'
 is_object_valid 'user' 'USER' "$user"
 
 
@@ -59,12 +70,15 @@ is_object_valid 'user' 'USER' "$user"
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Listing nameservers
-case $format in 
-    json)   json_list_ns ;;
-    plain)  nohead=1; shell_list_ns ;;
-    shell)  shell_list_ns ;;
-    *)      check_args '1' '0' 'USER [FORMAT]'
+# Parsing name servers
+ns=$(grep "^NS='" $USER_DATA/user.conf |cut -f 2 -d \')
+
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 74 - 47
bin/v-list-user-package

@@ -17,43 +17,73 @@ format=${2-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_package() {
-    i=1
-    fileds_count=$(echo "$fields" | wc -w)
-    pkg_data=$(cat $VESTA/data/packages/$PACKAGE.pkg)
+# JSON list function
+json_list() {
     echo '{'
-    eval $pkg_data
-    for field in $fields; do
-        eval value=$field
-        if [ $i -eq 1 ]; then
-            echo -e "\t\"$value\": {"
-        else
-            if [ $fileds_count -eq $i ]; then
-                echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
-            else
-                echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
-            fi
-        fi
-    (( ++i))
-    done
-    if [ -n "$value" ]; then
-        echo -e '        }'
-    fi
-    echo -e '}'
+    echo '    "'$PACKAGE'": {
+        "WEB_TEMPLATE": "'$WEB_TEMPLATE'",
+        "PROXY_TEMPLATE": "'$PROXY_TEMPLATE'",
+        "DNS_TEMPLATE": "'$DNS_TEMPLATE'",
+        "WEB_DOMAINS": "'$WEB_DOMAINS'",
+        "WEB_ALIASES": "'$WEB_ALIASES'",
+        "DNS_DOMAINS": "'$DNS_DOMAINS'",
+        "DNS_RECORDS": "'$DNS_RECORDS'",
+        "MAIL_DOMAINS": "'$MAIL_DOMAINS'",
+        "MAIL_ACCOUNTS": "'$MAIL_ACCOUNTS'",
+        "DATABASES": "'$DATABASES'",
+        "CRON_JOBS": "'$CRON_JOBS'",
+        "DISK_QUOTA": "'$DISK_QUOTA'",
+        "BANDWIDTH": "'$BANDWIDTH'",
+        "NS": "'$NS'",
+        "SHELL": "'$SHELL'",
+        "BACKUPS": "'$BACKUPS'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+    echo '}'
 }
 
-# Shell function
-shell_list_package() {
-    line=$(cat $VESTA/data/packages/$PACKAGE.pkg)
-    eval $line
-    for field in $fields; do
-        eval key="$field"
-        if [ -z "$key" ]; then
-            key='NULL'
-        fi
-        echo "${field//$/}: $key "
-    done
+# SHELL list function
+shell_list() {
+    echo "PACKAGE:        $PACKAGE"
+    echo "WEB TEMPLATE:   $WEB_TEMPLATE"
+    echo "PROXY TEMPLATE: $PROXY_TEMPLATE"
+    echo "DNS TEMPLATE:   $DNS_TEMPLATE"
+    echo "WEB DOMAINS:    $WEB_DOMAINS"
+    echo "WEB ALIASES:    $WEB_ALIASES"
+    echo "DNS DOMAINS:    $DNS_DOMAINS"
+    echo "DNS RECORDS:    $DNS_RECORDS"
+    echo "MAIL DOMAINS:   $MAIL_DOMAINS"
+    echo "MAIL ACCOUNTS:  $MAIL_ACCOUNTS"
+    echo "DATABASES:      $DATABASES"
+    echo "CRON JOBS:      $CRON_JOBS"
+    echo "DISK QUOTA:     $DISK_QUOTA"
+    echo "BANDWIDTH:      $BANDWIDTH"
+    echo "NS:             $NS"
+    echo "SHELL:          $SHELL"
+    echo "BACKUPS:        $BACKUPS"
+    echo "TIME:           $TIME"
+    echo "DATE:           $DATE"
+}
+
+# PLAIN list function
+plain_list() {
+    echo -ne "$PACKAGE\t$WEB_TEMPLATE\t$PROXY_TEMPLATE\t$DNS_TEMPLATE\t"
+    echo -ne "$WEB_DOMAINS\t$WEB_ALIASES\t$DNS_DOMAINS\t$DNS_RECORDS\t"
+    echo -ne "$MAIL_DOMAINS\t$MAIL_ACCOUNTS\t$DATABASES\t$CRON_JOBS\t"
+    echo -e "$DISK_QUOTA\t$BANDWIDTH\t$NS\t$SHELL\t$BACKUPS\t$TIME\t$DATE"
+}
+
+# CSV list function
+csv_list() {
+    echo -n "PACKAGE,WEB_TEMPLATE,PROXY_TEMPLATE,DNS_TEMPLATE,"
+    echo -n "WEB_DOMAINS,WEB_ALIASES,DNS_DOMAINS,DNS_RECORDS,"
+    echo -n "MAIL_DOMAINS,MAIL_ACCOUNTS,DATABASES,CRON_JOBS,"
+    echo "DISK_QUOTA,BANDWIDTH,NS,SHELL,BACKUPS,TIME,DATE"
+    echo -n "$PACKAGE,$WEB_TEMPLATE,$PROXY_TEMPLATE,$DNS_TEMPLATE,"
+    echo -n "$WEB_DOMAINS,$WEB_ALIASES,$DNS_DOMAINS,$DNS_RECORDS,"
+    echo -n "$MAIL_DOMAINS,$MAIL_ACCOUNTS,$DATABASES,$CRON_JOBS,"
+    echo "$DISK_QUOTA,$BANDWIDTH,\"$NS\",$SHELL,$BACKUPS,$TIME,$DATE"
 }
 
 
@@ -63,7 +93,7 @@ shell_list_package() {
 
 # Checking args
 check_args '1' "$#" 'PACKAGE [FORMAT]'
-validate_format 'package'
+is_format_valid 'package'
 is_package_valid
 
 
@@ -71,18 +101,15 @@ is_package_valid
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining fileds to select
-fields='$PACKAGE $WEB_TEMPLATE $PROXY_TEMPLATE $DNS_TEMPLATE $WEB_DOMAINS
-    $WEB_ALIASES $DNS_DOMAINS $DNS_RECORDS $MAIL_DOMAINS $MAIL_ACCOUNTS
-    $DATABASES $CRON_JOBS $DISK_QUOTA $BANDWIDTH $NS $SHELL $BACKUPS $TIME
-    $DATE'
-
-# Listing ip
-case $format in 
-    json)   json_list_package ;;
-    plain)  shell_list_package ;;
-    shell)  shell_list_package | column -t ;;
-    *)      check_args '1' '0' 'IP [FORMAT]'
+# Parsing package
+source $VESTA/data/packages/$PACKAGE.pkg
+
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 80 - 51
bin/v-list-user-packages

@@ -15,53 +15,85 @@ format=${1-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_pkgs() {
-    echo '{'
-    fileds_count=$(echo "$fields" | wc -w)
-    for package in $(ls  --sort=time  $VESTA/data/packages |grep .pkg); do
+
+# JSON list function
+json_list() {
+    IFS=$'\n'
+    i=1
+    objects=$(echo "$packages" |wc -l)
+    echo "{"
+    for package in $packages; do
         PACKAGE=${package/.pkg/}
-        pkg_data=$(cat $VESTA/data/packages/$package)
-        eval $pkg_data
-        if [ -n "$data" ]; then
-            echo -e '        },'
+        source $VESTA/data/packages/$package
+        echo -n '    "'$PACKAGE'": {
+        "WEB_TEMPLATE": "'$WEB_TEMPLATE'",
+        "PROXY_TEMPLATE": "'$PROXY_TEMPLATE'",
+        "DNS_TEMPLATE": "'$DNS_TEMPLATE'",
+        "WEB_DOMAINS": "'$WEB_DOMAINS'",
+        "WEB_ALIASES": "'$WEB_ALIASES'",
+        "DNS_DOMAINS": "'$DNS_DOMAINS'",
+        "DNS_RECORDS": "'$DNS_RECORDS'",
+        "MAIL_DOMAINS": "'$MAIL_DOMAINS'",
+        "MAIL_ACCOUNTS": "'$MAIL_ACCOUNTS'",
+        "DATABASES": "'$DATABASES'",
+        "CRON_JOBS": "'$CRON_JOBS'",
+        "DISK_QUOTA": "'$DISK_QUOTA'",
+        "BANDWIDTH": "'$BANDWIDTH'",
+        "NS": "'$NS'",
+        "SHELL": "'$SHELL'",
+        "BACKUPS": "'$BACKUPS'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
+        else
+            echo
         fi
-        i=1
-        for field in $fields; do
-            eval value=$field
-            if [ $i -eq 1 ]; then
-                (( ++i))
-                echo -e "\t\"$value\": {"
-            else
-                if [ $i -lt $fileds_count ]; then
-                    (( ++i))
-                    echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
-                else
-                    echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
-                    data=1
-                fi
-            fi
-        done
+        ((i++))
     done
-    if [ -n "$data" ]; then
-        echo -e '        }'
-    fi
-    echo -e '}'
+    echo '}'
 }
 
-# Shell fnction
-shell_list_pkgs() {
-    for package in $(ls -t $VESTA/data/packages |grep .pkg); do
+# SHELL list function
+shell_list() {
+    echo "PKG   TPL   WEB   DNS   MAIL   DB   SHELL   DISK   BW"
+    echo "---   ---   ---   ---   ----   --   -----   ----   --"
+    for package in $packages; do
+        source $VESTA/data/packages/$package
         PACKAGE=${package/.pkg/}
-        pkg_descr=$(cat $VESTA/data/packages/$package)
-        eval $pkg_descr
-        if [ -z "$nohead" ]; then
-            echo '----------'
-        fi
-        for field in $fields; do
-            eval value=$field
-            echo -e "${field//$/}: $value"
-        done
+        package_data=$(cat $VESTA/data/packages/$package)
+        package_data=$(echo "$package_data" |sed -e 's/unlimited/unlim/g')
+        eval $package_data
+        echo -n "$PACKAGE $WEB_TEMPLATE $WEB_DOMAINS $DNS_DOMAINS "
+        echo "$MAIL_DOMAINS $DATABASES $SHELL $DISK_QUOTA $BANDWIDTH"
+    done
+}
+
+# PLAIN list function
+plain_list() {
+    for package in $packages; do
+        source $VESTA/data/packages/$package
+        PACKAGE=${package/.pkg/}
+        echo -ne "$PACKAGE\t$WEB_TEMPLATE\t$PROXY_TEMPLATE\t$DNS_TEMPLATE\t"
+        echo -ne "$WEB_DOMAINS\t$WEB_ALIASES\t$DNS_DOMAINS\t$DNS_RECORDS\t"
+        echo -ne "$MAIL_DOMAINS\t$MAIL_ACCOUNTS\t$DATABASES\t$CRON_JOBS\t"
+        echo -e "$DISK_QUOTA\t$BANDWIDTH\t$NS\t$SHELL\t$BACKUPS\t$TIME\t$DATE"
+    done
+}
+
+# CSV list function
+csv_list() {
+    echo -n "PACKAGE,WEB_TEMPLATE,PROXY_TEMPLATE,DNS_TEMPLATE,"
+    echo -n "WEB_DOMAINS,WEB_ALIASES,DNS_DOMAINS,DNS_RECORDS,"
+    echo -n "MAIL_DOMAINS,MAIL_ACCOUNTS,DATABASES,CRON_JOBS,"
+    echo "DISK_QUOTA,BANDWIDTH,NS,SHELL,BACKUPS,TIME,DATE"
+    for package in $packages; do
+        PACKAGE=${package/.pkg/}
+        echo -n "$PACKAGE,$WEB_TEMPLATE,$PROXY_TEMPLATE,$DNS_TEMPLATE,"
+        echo -n "$WEB_DOMAINS,$WEB_ALIASES,$DNS_DOMAINS,$DNS_RECORDS,"
+        echo -n "$MAIL_DOMAINS,$MAIL_ACCOUNTS,$DATABASES,$CRON_JOBS,"
+        echo "$DISK_QUOTA,$BANDWIDTH,\"$NS\",$SHELL,$BACKUPS,$TIME,$DATE"
     done
 }
 
@@ -70,18 +102,15 @@ shell_list_pkgs() {
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining fields
-fields='$PACKAGE $WEB_TEMPLATE $BACKEND_TEMPLATE $PROXY_TEMPLATE
-    $DNS_TEMPLATE $WEB_DOMAINS $WEB_ALIASES $DNS_DOMAINS $DNS_RECORDS
-    $MAIL_DOMAINS $MAIL_ACCOUNTS $DATABASES $CRON_JOBS $DISK_QUOTA $BANDWIDTH
-    $NS $SHELL $BACKUPS $TIME $DATE'
+# Parsing packages
+packages=$(ls --sort=time $VESTA/data/packages |grep .pkg)
 
-# Listing domains
+# Listing data
 case $format in
-    json)   json_list_pkgs ;;
-    plain)  nohead=1; shell_list_pkgs ;;
-    shell)  shell_list_pkgs | column -t ;;
-    *)      check_args '1' '0' '[FORMAT]'
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t ;;
 esac
 
 

+ 99 - 16
bin/v-list-user-stats

@@ -1,6 +1,6 @@
 #!/bin/bash
 # info: list user stats
-# options: USER [FORMAT]
+# options: [FORMAT]
 #
 # The function for listing user statistics
 
@@ -16,13 +16,105 @@ format=${2-shell}
 # Includes
 source $VESTA/func/main.sh
 
+# JSON list function
+json_list() {
+    IFS=$'\n'
+    i=1
+    objects=$(grep DATE $USER_DATA/stats.log |wc -l)
+    echo "{"
+    while read str; do
+        eval $str
+        echo -n '    "'$DATE'": {
+        "TIME": "'$TIME'",
+        "PACKAGE": "'$PACKAGE'",
+        "IP_OWNED": "'$IP_OWNED'",
+        "DISK_QUOTA": "'$DISK_QUOTA'",
+        "U_DISK": "'$U_DISK'",
+        "U_DISK_DIRS": "'$U_DISK_DIRS'",
+        "U_DISK_WEB": "'$U_DISK_WEB'",
+        "U_DISK_MAIL": "'$U_DISK_MAIL'",
+        "U_DISK_DB": "'$U_DISK_DB'",
+        "BANDWIDTH": "'$BANDWIDTH'",
+        "U_BANDWIDTH": "'$U_BANDWIDTH'",
+        "U_WEB_DOMAINS": "'$U_WEB_DOMAINS'",
+        "U_WEB_SSL": "'$U_WEB_SSL'",
+        "U_WEB_ALIASES": "'$U_WEB_ALIASES'",
+        "U_DNS_DOMAINS": "'$U_DNS_DOMAINS'",
+        "U_DNS_RECORDS": "'$U_DNS_RECORDS'",
+        "U_MAIL_DOMAINS": "'$U_MAIL_DOMAINS'",
+        "U_MAIL_DKIM": "'$U_MAIL_DKIM'",
+        "U_MAIL_ACCOUNTS": "'$U_MAIL_ACCOUNTS'",
+        "U_DATABASES": "'$U_DATABASES'",
+        "U_CRON_JOBS": "'$U_CRON_JOBS'",
+        "U_BACKUPS": "'$U_BACKUPS'"
+    }'
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
+        else
+            echo
+        fi
+        ((i++))
+    done < <(cat $USER_DATA/stats.log)
+    echo '}'
+}
+
+# SHELL list function
+shell_list() {
+    IFS=$'\n'
+    echo "DATE   WEB   DNS   MAIL   DB   BACKUPS   IP   DISK   BW"
+    echo "----   ---   ---   ----   --   -------   --   ----   --"
+    while read str; do
+        eval $str
+        if [ -z "$U_USERS" ]; then
+            U_USERS=1
+        fi
+        echo -n "$DATE $U_WEB_DOMAINS $U_DNS_DOMAINS "
+        echo -n "$U_MAIL_DOMAINS $U_DATABASES $U_BACKUPS $IP_OWNED "
+        echo "$U_DISK $U_BANDWIDTH"
+    done < <(cat $USER_DATA/stats.log)
+}
+
+# PLAIN list function
+plain_list() {
+    IFS=$'\n'
+    while read str; do
+        eval $str
+        echo -ne "$DATE\t$TIME\t$PACKAGE\t$IP_OWNED\t$DISK_QUOTA\t$U_DISK\t"
+        echo -ne "$U_DISK_DIRS\t$U_DISK_WEB\t$U_DISK_MAIL\t$U_DISK_DB\t"
+        echo -ne "$BANDWIDTH\t$U_BANDWIDTH\t$U_WEB_DOMAINS\t$U_WEB_SSL\t"
+        echo -ne "$U_WEB_ALIASES\t$U_DNS_DOMAINS\t$U_DNS_RECORDS\t"
+        echo -ne "$U_MAIL_DOMAINS\t$U_MAIL_DKIM\t$U_MAIL_ACCOUNTS\t"
+        echo -e "$U_DATABASES\t$U_CRON_JOBS\t$U_BACKUPS"
+    done < <(cat $USER_DATA/stats.log)
+}
+
+# CSV list function
+csv_list() {
+    IFS=$'\n'
+    echo -n "DATE,TIME,PACKAGE,IP_OWNED,DISK_QUOTA,U_DISK,"
+    echo -n "U_DISK_DIRS,U_DISK_WEB,U_DISK_MAIL,U_DISK_DB,"
+    echo -n "BANDWIDTH,U_BANDWIDTH,U_WEB_DOMAINS,U_WEB_SSL,"
+    echo -n "U_WEB_ALIASES,U_DNS_DOMAINS,U_DNS_RECORDS,"
+    echo -n "U_MAIL_DOMAINS,U_MAIL_DKIM,U_MAIL_ACCOUNTS,"
+    echo "U_DATABASES,U_CRON_JOBS,U_BACKUPS"
+
+    while read str; do
+        eval $str
+        echo -n "$DATE,$TIME,$PACKAGE,$IP_OWNED,$DISK_QUOTA,$U_DISK,"
+        echo -n "$U_DISK_DIRS,$U_DISK_WEB,$U_DISK_MAIL,$U_DISK_DB,"
+        echo -n "$BANDWIDTH,$U_BANDWIDTH,$U_WEB_DOMAINS,$U_WEB_SSL,"
+        echo -n "$U_WEB_ALIASES,$U_DNS_DOMAINS,$U_DNS_RECORDS,"
+        echo -n "$U_MAIL_DOMAINS,$U_MAIL_DKIM,$U_MAIL_ACCOUNTS,"
+        echo "$U_DATABASES,$U_CRON_JOBS,$U_BACKUPS"
+    done < <(cat $USER_DATA/stats.log)
+}
+
 
 #----------------------------------------------------------#
 #                    Verifications                         #
 #----------------------------------------------------------#
 
 check_args '1' "$#" 'USER [FORMAT]'
-validate_format 'user'
 is_object_valid 'user' 'USER' "$user"
 
 
@@ -36,21 +128,12 @@ if [ ! -e "$conf" ]; then
     touch $conf
 fi
 
-# Defining fileds to select
-fields="\$DATE \$TIME \$PACKAGE \$IP_OWNED \$DISK_QUOTA \$U_DISK \$U_DISK_DIRS"
-fields="$fields \$U_DISK_WEB \$U_DISK_MAIL \$U_DISK_DB \$BANDWIDTH"
-fields="$fields \$U_BANDWIDTH \$U_WEB_DOMAINS \$U_WEB_SSL \$U_WEB_ALIASES"
-fields="$fields \$U_DNS_DOMAINS \$U_DNS_RECORDS \$U_MAIL_DOMAINS \$U_MAIL_DKIM"
-fields="$fields \$U_MAIL_ACCOUNTS \$U_DATABASES \$U_CRON_JOBS \$U_BACKUPS"
-
-# Listing domains
-case $format in 
+# Listing data
+case $format in
     json)   json_list ;;
-    plain)  nohead=1; shell_list ;;
-    shell)  fields='$DATE $PACKAGE $U_DISK $U_BANDWIDTH $U_WEB_DOMAINS';
-            fields="$fields \$U_DATABASES"
-            shell_list | column -t ;;
-    *)      check_args '1' '0' 'USER [FORMAT]'
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t ;;
 esac
 
 

+ 143 - 69
bin/v-list-users

@@ -1,8 +1,8 @@
 #!/bin/bash
-# info: list system users
+# info: list users
 # options: [FORMAT]
 #
-# The function for obtaining the list of all server's users.
+# The function to obtain the list of all system users.
 
 
 #----------------------------------------------------------#
@@ -12,59 +12,148 @@
 # Argument definition
 format=${1-shell}
 
-# Json function
-json_list_users() {
+# JSON list function
+json_list() {
     echo '{'
-    fileds_count=$(echo "$fields" | wc -w)
-    for USER in $(grep @ /etc/passwd|cut -f 1 -d :); do
+    object_count=$(grep '@' /etc/passwd |wc -l)
+    i=1
+    while read USER; do
         source $VESTA/data/users/$USER/user.conf
-        if [ -n "$data" ]; then
-            echo -e '        },'
+        echo -n '    "'$USER'": {
+        "FNAME": "'$FNAME'",
+        "LNAME": "'$LNAME'",
+        "PACKAGE": "'$PACKAGE'",
+        "WEB_TEMPLATE": "'$WEB_TEMPLATE'",
+        "BACKEND_TEMPLATE": "'$BACKEND_TEMPLATE'",
+        "PROXY_TEMPLATE": "'$PROXY_TEMPLATE'",
+        "DNS_TEMPLATE": "'$DNS_TEMPLATE'",
+        "WEB_DOMAINS": "'$WEB_DOMAINS'",
+        "WEB_ALIASES": "'$WEB_ALIASES'",
+        "DNS_DOMAINS": "'$DNS_DOMAINS'",
+        "DNS_RECORDS": "'$DNS_RECORDS'",
+        "MAIL_DOMAINS": "'$MAIL_DOMAINS'",
+        "MAIL_ACCOUNTS": "'$MAIL_ACCOUNTS'",
+        "DATABASES": "'$DATABASES'",
+        "CRON_JOBS": "'$CRON_JOBS'",
+        "DISK_QUOTA": "'$DISK_QUOTA'",
+        "BANDWIDTH": "'$BANDWIDTH'",
+        "NS": "'$NS'",
+        "SHELL": "'$SHELL'",
+        "BACKUPS": "'$BACKUPS'",
+        "CONTACT": "'$CONTACT'",
+        "CRON_REPORTS": "'$CRON_REPORTS'",
+        "RKEY": "'$RKEY'",
+        "SUSPENDED": "'$SUSPENDED'",
+        "SUSPENDED_USERS": "'$SUSPENDED_USERS'",
+        "SUSPENDED_WEB": "'$SUSPENDED_WEB'",
+        "SUSPENDED_DNS": "'$SUSPENDED_DNS'",
+        "SUSPENDED_MAIL": "'$SUSPENDED_MAIL'",
+        "SUSPENDED_DB": "'$SUSPENDED_DB'",
+        "SUSPENDED_CRON": "'$SUSPENDED_CRON'",
+        "IP_AVAIL": "'$IP_AVAIL'",
+        "IP_OWNED": "'$IP_OWNED'",
+        "U_USERS": "'$U_USERS'",
+        "U_DISK": "'$U_DISK'",
+        "U_DISK_DIRS": "'$U_DISK_DIRS'",
+        "U_DISK_WEB": "'$U_DISK_WEB'",
+        "U_DISK_MAIL": "'$U_DISK_MAIL'",
+        "U_DISK_DB": "'$U_DISK_DB'",
+        "U_BANDWIDTH": "'$U_BANDWIDTH'",
+        "U_WEB_DOMAINS": "'$U_WEB_DOMAINS'",
+        "U_WEB_SSL": "'$U_WEB_SSL'",
+        "U_WEB_ALIASES": "'$U_WEB_ALIASES'",
+        "U_DNS_DOMAINS": "'$U_DNS_DOMAINS'",
+        "U_DNS_RECORDS": "'$U_DNS_RECORDS'",
+        "U_MAIL_DOMAINS": "'$U_MAIL_DOMAINS'",
+        "U_MAIL_DKIM": "'$U_MAIL_DKIM'",
+        "U_MAIL_ACCOUNTS": "'$U_MAIL_ACCOUNTS'",
+        "U_DATABASES": "'$U_DATABASES'",
+        "U_CRON_JOBS": "'$U_CRON_JOBS'",
+        "U_BACKUPS": "'$U_BACKUPS'",
+        "LANGUAGE": "'$LANGUAGE'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+        }'
+        if [ "$i" -lt "$object_count" ]; then
+            echo ','
+        else
+            echo
         fi
-        i=1
-        for field in $fields; do
-            eval value=$field
-            if [ $i -eq 1 ]; then
-                (( ++i))
-                echo -e "\t\"$value\": {"
-            else
-                if [ $i -lt $fileds_count ]; then
-                    (( ++i))
-                    echo -e "\t\t\"${field//$/}\": \"$value\","
-                else
-                    echo -e "\t\t\"${field//$/}\": \"$value\""
-                    data=1
-                fi
-            fi
-        done
-    done
-    if [ -n "$data" ]; then
-        echo -e '        }'
-    fi
-    echo -e '}'
+        ((i++))
+    done < <(grep '@' /etc/passwd |cut -f1 -d:)
+
+    echo '}'
 }
 
-# Shell function
-shell_list_users() {
-    if [  -z "$nohead" ]; then
-        echo "${fields//$/}"
-        for a in $fields; do
-            echo -e "--------- \c"
-        done
-        echo
-    fi
+# SHELL list function
+shell_list() {
+    echo "USER   PKG   WEB   DNS   MAIL   DB   DISK   BW   SPND   DATE"
+    echo "----   ---   ---   ---   ---    --   ----   --   ----   ----"
+    while read USER; do
+        source $VESTA/data/users/$USER/user.conf
+        echo -n "$USER $PACKAGE $U_WEB_DOMAINS $U_DNS_DOMAINS $U_MAIL_DOMAINS"
+        echo " $U_DATABASES $U_DISK $U_BANDWIDTH $SUSPENDED $DATE"
+    done < <(grep '@' /etc/passwd |cut -f1 -d:)
+}
 
-    for USER in $(grep @ /etc/passwd|cut -f 1 -d :); do
+# PLAIN list function
+plain_list() {
+    while read USER; do
         source $VESTA/data/users/$USER/user.conf
-        for field in $fields; do
-            eval value=$field
-            if [ -z "$value" ]; then
-                value='NULL'
-            fi
-            echo -n "$value "
-        done
-        echo
-    done
+        echo -ne "$USER\t$FNAME\t$LNAME\t$PACKAGE\t$WEB_TEMPLATE\t"
+        echo -ne "$BACKEND_TEMPLATE\t$PROXY_TEMPLATE\t$DNS_TEMPLATE\t"
+        echo -ne "$WEB_DOMAINS\t$WEB_ALIASES\t$DNS_DOMAINS\t$DNS_RECORDS\t"
+        echo -ne "$MAIL_DOMAINS\t$MAIL_ACCOUNTS\t$DATABASES\t$CRON_JOBS\t"
+        echo -ne "$DISK_QUOTA\t$BANDWIDTH\t$NS\t$SHELL\t$BACKUPS\t"
+        echo -ne "$CONTACT\t$CRON_REPORTS\t$RKEY\t$SUSPENDED\t"
+        echo -ne "$SUSPENDED_USERS\t$SUSPENDED_WEB\t$SUSPENDED_DNS\t"
+        echo -ne "$SUSPENDED_MAIL\t$SUSPENDED_DB\t$SUSPENDED_CRON\t"
+        echo -ne "$IP_AVAIL\t$IP_OWNED\t$U_USERS\t$U_DISK\t$U_DISK_DIRS\t"
+        echo -ne "$U_DISK_WEB\t$U_DISK_MAIL\t$U_DISK_DB\t$U_BANDWIDTH\t"
+        echo -ne "$U_WEB_DOMAINS\t$U_WEB_SSL\t$U_WEB_ALIASES\t"
+        echo -ne "$U_DNS_DOMAINS\t$U_DNS_RECORDS\t$U_MAIL_DOMAINS\t"
+        echo -ne "$U_MAIL_DKIM\t$U_MAIL_ACCOUNTS\t$U_DATABASES\t"
+        echo -e "$U_CRON_JOBS\t$U_BACKUPS\t$LANGUAGE\t$TIME\t$DATE\t"
+    done < <(grep '@' /etc/passwd |cut -f1 -d:)
+}
+
+# CSV list function
+csv_list() {
+    echo -n "USER,FNAME,LNAME,PACKAGE,WEB_TEMPLATE,BACKEND_TEMPLATE,"
+    echo -n "PROXY_TEMPLATE,DNS_TEMPLATE,WEB_DOMAINS,WEB_ALIASES,"
+    echo -n "DNS_DOMAINS,DNS_RECORDS,MAIL_DOMAINS,MAIL_ACCOUNTS,"
+    echo -n "DATABASES,CRON_JOBS,DISK_QUOTA,BANDWIDTH,NS,HOME,SHELL,"
+    echo -n "BACKUPS,CONTACT,CRON_REPORTS,RKEY,SUSPENDED,SUSPENDED_USERS,"
+    echo -n "SUSPENDED_WEB,SUSPENDED_DNS,SUSPENDED_MAIL,SUSPENDED_DB,"
+    echo -n "SUSPENDED_CRON,IP_AVAIL,IP_OWNED,U_USERS,U_DISK,U_DISK_DIRS,"
+    echo -n "U_DISK_WEB,U_DISK_MAIL,U_DISK_DB,U_BANDWIDTH,U_WEB_DOMAINS,"
+    echo -n "U_WEB_SSL,U_WEB_ALIASES,U_DNS_DOMAINS,U_DNS_RECORDS,"
+    echo -n "U_MAIL_DOMAINS,U_MAIL_DKIM,U_MAIL_ACCOUNTS,U_DATABASES"
+    echo "U_CRON_JOBS,U_BACKUPS,LANGUAGE,TIME,DATE"
+    while read USER; do
+        source $VESTA/data/users/$USER/user.conf
+        echo -n "$USER,\"$FNAME\",\"$LNAME\",$PACKAGE,$WEB_TEMPLATE,"
+        echo -n "$BACKEND_TEMPLATE,$PROXY_TEMPLATE,$DNS_TEMPLATE,"
+        echo -n "$WEB_DOMAINS,$WEB_ALIASES,$DNS_DOMAINS,$DNS_RECORDS,"
+        echo -n "$MAIL_DOMAINS,$MAIL_ACCOUNTS,$DATABASES,$CRON_JOBS,"
+        echo -n "$DISK_QUOTA,$BANDWIDTH,\"$NS\",$HOME,$SHELL,$BACKUPS,"
+        echo -n "$CONTACT,$CRON_REPORTS,\"$RKEY\",$SUSPENDED,"
+        echo -n "$SUSPENDED_USERS,$SUSPENDED_WEB,$SUSPENDED_DNS,"
+        echo -n "$SUSPENDED_MAIL,$SUSPENDED_DB,$SUSPENDED_CRON,$IP_AVAIL,"
+        echo -n "$IP_OWNED,$U_USERS,$U_DISK,$U_DISK_DIRS,$U_DISK_WEB,"
+        echo -n "$U_DISK_MAIL,$U_DISK_DB,$U_BANDWIDTH,$U_WEB_DOMAINS,"
+        echo -n "$U_WEB_SSL,$U_WEB_ALIASES,$U_DNS_DOMAINS,$U_DNS_RECORDS,"
+        echo -n "$U_MAIL_DOMAINS,$U_MAIL_DKIM,$U_MAIL_ACCOUNTS,$U_DATABASES,"
+        echo "$U_CRON_JOBS,$U_BACKUPS,$LANGUAGE,$TIME,$DATE"
+    done < <(grep '@' /etc/passwd |cut -f1 -d:)
+}
+
+# Raw list function
+raw_list() {
+    while read USER; do
+        echo $VESTA/data/users/$USER/user.conf
+        cat $VESTA/data/users/$USER/user.conf
+    done < <(grep '@' /etc/passwd |cut -f1 -d:)
 }
 
 
@@ -72,27 +161,12 @@ shell_list_users() {
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining fileds to select
-fields="\$USER \$FNAME \$LNAME \$PACKAGE \$WEB_TEMPLATE \$BACKEND_TEMPLATE"
-fields="$fields \$PROXY_TEMPLATE \$DNS_TEMPLATE \$WEB_DOMAINS \$WEB_ALIASES"
-fields="$fields \$DNS_DOMAINS \$DNS_RECORDS \$MAIL_DOMAINS \$MAIL_ACCOUNTS"
-fields="$fields \$DATABASES \$CRON_JOBS \$DISK_QUOTA \$BANDWIDTH \$NS \$SHELL"
-fields="$fields \$BACKUPS \$CONTACT \$CRON_REPORTS \$RKEY \$SUSPENDED"
-fields="$fields \$SUSPENDED_USERS \$SUSPENDED_WEB \$SUSPENDED_DNS"
-fields="$fields \$SUSPENDED_MAIL \$SUSPENDED_DB \$SUSPENDED_CRON \$IP_AVAIL"
-fields="$fields \$IP_OWNED \$U_USERS \$U_DISK \$U_DISK_DIRS \$U_DISK_WEB"
-fields="$fields \$U_DISK_MAIL \$U_DISK_DB \$U_BANDWIDTH \$U_WEB_DOMAINS"
-fields="$fields \$U_WEB_SSL \$U_WEB_ALIASES \$U_DNS_DOMAINS \$U_DNS_RECORDS"
-fields="$fields \$U_MAIL_DOMAINS \$U_MAIL_DKIM \$U_MAIL_ACCOUNTS"
-fields="$fields \$U_DATABASES \$U_CRON_JOBS \$U_BACKUPS \$LANGUAGE"
-fields="$fields \$TIME \$DATE"
-
-# Listing domains
-case $format in 
-    json)   json_list_users ;;
-    plain)  nohead=1; shell_list_users ;;
-    shell)  fields='$USER $PACKAGE $U_DISK $U_BANDWIDTH $SUSPENDED $DATE';
-            shell_list_users | column -t ;;
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t ;;
 esac
 
 

+ 99 - 14
bin/v-list-users-stats

@@ -15,6 +15,100 @@ format=${1-shell}
 # Includes
 source $VESTA/func/main.sh
 
+# JSON list function
+json_list() {
+    IFS=$'\n'
+    i=1
+    objects=$(grep DATE $VESTA/data/users/admin/overall_stats.log |wc -l)
+    echo "{"
+    while read str; do
+        eval $str
+        echo -n '    "'$DATE'": {
+        "TIME": "'$TIME'",
+        "PACKAGE": "'$PACKAGE'",
+        "IP_OWNED": "'$IP_OWNED'",
+        "DISK_QUOTA": "'$DISK_QUOTA'",
+        "U_DISK": "'$U_DISK'",
+        "U_DISK_DIRS": "'$U_DISK_DIRS'",
+        "U_DISK_WEB": "'$U_DISK_WEB'",
+        "U_DISK_MAIL": "'$U_DISK_MAIL'",
+        "U_DISK_DB": "'$U_DISK_DB'",
+        "BANDWIDTH": "'$BANDWIDTH'",
+        "U_BANDWIDTH": "'$U_BANDWIDTH'",
+        "U_WEB_DOMAINS": "'$U_WEB_DOMAINS'",
+        "U_WEB_SSL": "'$U_WEB_SSL'",
+        "U_WEB_ALIASES": "'$U_WEB_ALIASES'",
+        "U_DNS_DOMAINS": "'$U_DNS_DOMAINS'",
+        "U_DNS_RECORDS": "'$U_DNS_RECORDS'",
+        "U_MAIL_DOMAINS": "'$U_MAIL_DOMAINS'",
+        "U_MAIL_DKIM": "'$U_MAIL_DKIM'",
+        "U_MAIL_ACCOUNTS": "'$U_MAIL_ACCOUNTS'",
+        "U_DATABASES": "'$U_DATABASES'",
+        "U_CRON_JOBS": "'$U_CRON_JOBS'",
+        "U_BACKUPS": "'$U_BACKUPS'",
+        "U_USERS": "'$U_USERS'"
+    }'
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
+        else
+            echo
+        fi
+        ((i++))
+    done < <(cat $VESTA/data/users/admin/overall_stats.log)
+    echo '}'
+}
+
+# SHELL list function
+shell_list() {
+    IFS=$'\n'
+    echo "DATE   USER   WEB   DNS   MAIL   DB   BACKUPS   IP   DISK   BW"
+    echo "----   ----   ---   ---   ----   --   -------   --   ----   --"
+    while read str; do
+        eval $str
+        if [ -z "$U_USERS" ]; then
+            U_USERS=1
+        fi
+        echo -n "$DATE $U_USERS $U_WEB_DOMAINS $U_DNS_DOMAINS "
+        echo -n "$U_MAIL_DOMAINS $U_DATABASES $U_BACKUPS $IP_OWNED "
+        echo "$U_DISK $U_BANDWIDTH"
+    done < <(cat $VESTA/data/users/admin/overall_stats.log)
+}
+
+# PLAIN list function
+plain_list() {
+    IFS=$'\n'
+    while read str; do
+        eval $str
+        echo -ne "$DATE\t$TIME\t$PACKAGE\t$IP_OWNED\t$DISK_QUOTA\t$U_DISK\t"
+        echo -ne "$U_DISK_DIRS\t$U_DISK_WEB\t$U_DISK_MAIL\t$U_DISK_DB\t"
+        echo -ne "$BANDWIDTH\t$U_BANDWIDTH\t$U_WEB_DOMAINS\t$U_WEB_SSL\t"
+        echo -ne "$U_WEB_ALIASES\t$U_DNS_DOMAINS\t$U_DNS_RECORDS\t"
+        echo -ne "$U_MAIL_DOMAINS\t$U_MAIL_DKIM\t$U_MAIL_ACCOUNTS\t"
+        echo -e "$U_DATABASES\t$U_CRON_JOBS\t$U_BACKUPS\t$U_USERS"
+    done < <(cat $VESTA/data/users/admin/overall_stats.log)
+}
+
+# CSV list function
+csv_list() {
+    IFS=$'\n'
+    echo -n "DATE,TIME,PACKAGE,IP_OWNED,DISK_QUOTA,U_DISK,"
+    echo -n "U_DISK_DIRS,U_DISK_WEB,U_DISK_MAIL,U_DISK_DB,"
+    echo -n "BANDWIDTH,U_BANDWIDTH,U_WEB_DOMAINS,U_WEB_SSL,"
+    echo -n "U_WEB_ALIASES,U_DNS_DOMAINS,U_DNS_RECORDS,"
+    echo -n "U_MAIL_DOMAINS,U_MAIL_DKIM,U_MAIL_ACCOUNTS,"
+    echo "U_DATABASES,U_CRON_JOBS,U_BACKUPS,U_USERS"
+
+    while read str; do
+        eval $str
+        echo -n "$DATE,$TIME,$PACKAGE,$IP_OWNED,$DISK_QUOTA,$U_DISK,"
+        echo -n "$U_DISK_DIRS,$U_DISK_WEB,$U_DISK_MAIL,$U_DISK_DB,"
+        echo -n "$BANDWIDTH,$U_BANDWIDTH,$U_WEB_DOMAINS,$U_WEB_SSL,"
+        echo -n "$U_WEB_ALIASES,$U_DNS_DOMAINS,$U_DNS_RECORDS,"
+        echo -n "$U_MAIL_DOMAINS,$U_MAIL_DKIM,$U_MAIL_ACCOUNTS,"
+        echo "$U_DATABASES,$U_CRON_JOBS,$U_BACKUPS,$U_USERS"
+    done < <(cat $VESTA/data/users/admin/overall_stats.log)
+}
+
 
 #----------------------------------------------------------#
 #                    Verifications                         #
@@ -33,21 +127,12 @@ if [ ! -e "$conf" ]; then
     touch $conf
 fi
 
-# Defining fileds to select
-fields="\$DATE \$TIME \$PACKAGE \$IP_OWNED \$DISK_QUOTA \$U_DISK \$U_DISK_DIRS"
-fields="$fields \$U_DISK_WEB \$U_DISK_MAIL \$U_DISK_DB \$BANDWIDTH"
-fields="$fields \$U_BANDWIDTH \$U_WEB_DOMAINS \$U_WEB_SSL \$U_WEB_ALIASES"
-fields="$fields \$U_DNS_DOMAINS \$U_DNS_RECORDS \$U_MAIL_DOMAINS \$U_MAIL_DKIM"
-fields="$fields \$U_MAIL_ACCOUNTS \$U_DATABASES \$U_CRON_JOBS \$U_BACKUPS"
-
-# Listing domains
-case $format in 
+# Listing data
+case $format in
     json)   json_list ;;
-    plain)  nohead=1; shell_list ;;
-    shell)  fields='$DATE $U_DISK $U_BANDWIDTH $U_WEB_DOMAINS $U_DATABASES';
-            fields="$fields \$U_DATABASES"
-            shell_list | column -t ;;
-    *)      check_args '1' '0' '[FORMAT]'
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t ;;
 esac
 
 

+ 87 - 52
bin/v-list-web-domain

@@ -1,9 +1,8 @@
 #!/bin/bash
-# info: list web domain
+# info: list web domain parameters
 # options: USER DOMAIN [FORMAT]
 #
-# The function of obtaining the list of domain parameters. This call, just as
-# all v_list_* calls, supports 3 formats - json, shell and plain.
+# The function to obtain web domain parameters.
 
 
 #----------------------------------------------------------#
@@ -18,43 +17,87 @@ format=${3-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_domain() {
-    i=1
-    fileds_count=$(echo "$fields" | wc -w)
-    line=$(grep "DOMAIN='$domain'" $conf)
+# JSON list function
+json_list() {
     echo '{'
-    eval $line
-    for field in $fields; do
-        eval value=$field
-        if [ "$i" -eq 1 ]; then
-            echo -e "\t\"$value\": {"
-        else
-            if [ "$fileds_count" -eq "$i" ]; then
-                echo -e "\t\t\"${field//$/}\": \"$value\""
-            else
-                echo -e "\t\t\"${field//$/}\": \"$value\","
-            fi
-        fi
-        (( ++i))
-    done
-    if [ -n "$value" ]; then
-        echo -e '        }'
+    echo '    "'$DOMAIN'": {
+        "IP": "'$IP'",
+        "IP6": "'$IP6'",
+        "U_DISK": "'$U_DISK'",
+        "U_BANDWIDTH": "'$U_BANDWIDTH'",
+        "TPL": "'$TPL'",
+        "ALIAS": "'$ALIAS'",
+        "STATS": "'$STATS'",
+        "STATS_USER": "'$STATS_USER'",
+        "SSL": "'$SSL'",
+        "SSL_HOME": "'$SSL_HOME'",
+        "FTP_USER": "'$FTP_USER'",
+        "FTP_PATH": "'$FTP_PATH'",
+        "AUTH_USER": "'$AUTH_USER'",
+        "BACKEND": "'$BACKEND'",
+        "PROXY": "'$PROXY'",
+        "PROXY_EXT": "'$PROXY_EXT'",
+        "DOCUMENT_ROOT": "'$HOMEDIR/$user/web/$domain/public_html'",
+        "SUSPENDED": "'$SUSPENDED'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+    echo '}'
+}
+
+# SHELL list function
+shell_list() {
+    source $VESTA/conf/vesta.conf
+    echo "DOMAIN:         $DOMAIN"
+    echo "ALIAS:          ${ALIAS//,/ }"
+    echo "IP:             $IP"
+    if [ ! -z "$IP6" ]; then
+        echo "IP6:            $IP6"
+    fi
+    if [ ! -z "$SSL" ] && [ "$SSL" != 'no' ]; then
+        echo "SSL:            $SSL / $SSL_HOME"
+    fi
+    echo "TEMPLATE:       $TPL"
+    if [ ! -z "$WEB_BACKEND" ]; then
+        echo "BACKEND:        $BACKEND"
+    fi
+    if [ ! -z "$PROXY_SYSTEM" ]; then
+        echo "PROXY:          $PROXY"
+        echo "PROXY EXT:      ${PROXY_EXT//,/ }"
+    fi
+    if [ ! -z "$STATS" ]; then
+        echo "STATS:          $STATS"
     fi
-    echo -e "}"
+    if [ ! -z "$FTP_USER" ]; then
+        echo "FTP_USER:       ${FTP_USER//,/, }"
+    fi
+    if [ ! -z "$AUTH_USER" ]; then
+        echo "HTTP_AUTH:      $AUTH_USER"
+    fi
+    echo "DISK:           $U_DISK"
+    echo "BW:             $U_BANDWIDTH"
+    echo "SUSPENDED:      $SUSPENDED"
+    echo "TIME:           $TIME"
+    echo "DATE:           $DATE"
+}
+
+# PLAIN list function
+plain_list() {
+    echo -ne "$DOMAIN\t$IP\t$IP6\t$U_DISK\t$U_BANDWIDTH\t$TPL\t"
+    echo -ne "$ALIAS\t$STATS\t$STATS_USER\t$SSL\t$SSL_HOME\t"
+    echo -ne "$FTP_USER\t$FTP_PATH\t$AUTH_USER\t$BACKEND\t$PROXY\t"
+    echo -e "$PROXY_EXT\t$SUSPENDED\t$TIME\t$DATE"
 }
 
-# Shell function
-shell_list_domain() {
-    line=$(grep "DOMAIN='$domain'" $conf)
-    eval $line
-    for field in $fields; do
-        eval key="$field"
-        if [ -z "$key" ]; then
-            key='NULL'
-        fi
-        echo "${field//$/}: $key "
-    done
+# CSV list function
+csv_list() {
+    echo -n "DOMAIN,IP,IP6,U_DISK,U_BANDWIDTH,TPL,ALIAS,STATS,STATS_USER,SSL,"
+    echo -n "SSL_HOME,FTP_USER,FTP_PATH,AUTH_USER,BACKEND,PROXY,PROXY_EXT,"
+    echo "SUSPENDED,TIME,DATE"
+    echo -n "$DOMAIN,$IP,$IP6,$U_DISK,$U_BANDWIDTH,$TPL,\"$ALIAS\",$STATS"
+    echo -n "\"$STATS_USER\",$SSL,$SSL_HOME,\"$FTP_USER\",\"$FTP_PATH\","
+    echo -n "\"$AUTH_USER\",$BACKEND,$PROXY,\"$PROXY_EXT\",$SUSPENDED,$TIME,"
+    echo  "$DATE"
 }
 
 
@@ -71,23 +114,15 @@ is_object_valid 'web' 'DOMAIN' "$domain"
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining config
-conf=$USER_DATA/web.conf
-
-# Defining fileds to select
-fields='$DOMAIN $IP $IP6 $U_DISK $U_BANDWIDTH $TPL $ALIAS $STATS $STATS_USER
-    $SSL $SSL_HOME $FTP_USER $FTP_PATH $BACKEND $PROXY $PROXY_EXT $AUTH_USER
-    $DOCUMENT_ROOT $SUSPENDED $TIME $DATE'
-
-# Defining document root
-DOCUMENT_ROOT="$HOMEDIR/$user/web/$domain/public_html"
+# Parsing domain
+eval $(grep "DOMAIN='$domain'" $USER_DATA/web.conf)
 
-# Listing domains
-case $format in 
-    json)   json_list_domain ;;
-    plain)  nohead=1; shell_list_domain ;;
-    shell)  shell_list_domain |column -t;;
-    *)      check_args '2' '0' 'USER DOMAIN [FORMAT]'
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 24 - 12
bin/v-list-web-domain-accesslog

@@ -19,14 +19,14 @@ format=${4-shell}
 source $VESTA/func/main.sh
 source $VESTA/conf/vesta.conf
 
-
-# Json function
-json_list_log() {
+# JSON list function
+json_list() {
     i=1
+    objects=$(echo "$lines" |wc -l)
     echo '['
     for str in $lines; do
         str=$(echo "$str" |sed -e 's/"/\\"/g')
-        if [ "$i" -lt "$counter" ]; then
+        if [ "$i" -lt "$objects" ]; then
             echo -e  "\t\"$str\","
         else
             echo -e  "\t\"$str\""
@@ -36,17 +36,29 @@ json_list_log() {
     echo "]"
 }
 
-# Shell function
-shell_list_log() {
+# SHELL list function
+shell_list() {
+    echo "$lines"
+}
+
+# PLAIN list function
+plain_list() {
     echo "$lines"
 }
 
+# CSV list function
+csv_list() {
+    echo "LOG"
+    echo "$lines"
+}
+
+
 #----------------------------------------------------------#
 #                    Verifications                         #
 #----------------------------------------------------------#
 
 check_args '2' "$#" 'USER DOMAIN [LINES] [FORMAT]'
-validate_format 'user' 'domain' 'ttl'
+is_format_valid 'user' 'domain' 'ttl'
 is_object_valid 'user' 'USER' "$user"
 is_object_valid 'web' 'DOMAIN' "$domain"
 
@@ -63,14 +75,14 @@ else
 fi
 
 lines=$($read_cmd /var/log/$WEB_SYSTEM/domains/$domain.log)
-counter=$(echo "$lines" |wc -l)
 IFS=$'\n'
 
-# Listing logs
+# Listing data
 case $format in
-    json)   json_list_log ;;
-    plain)  shell_list_log ;;
-    shell)  shell_list_log ;;
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 24 - 12
bin/v-list-web-domain-errorlog

@@ -19,14 +19,14 @@ format=${4-shell}
 source $VESTA/func/main.sh
 source $VESTA/conf/vesta.conf
 
-
-# Json function
-json_list_log() {
+# JSON list function
+json_list() {
     i=1
+    objects=$(echo "$lines" |wc -l)
     echo '['
     for str in $lines; do
         str=$(echo "$str" |sed -e 's/"/\\"/g')
-        if [ "$i" -lt "$counter" ]; then
+        if [ "$i" -lt "$objects" ]; then
             echo -e  "\t\"$str\","
         else
             echo -e  "\t\"$str\""
@@ -36,17 +36,29 @@ json_list_log() {
     echo "]"
 }
 
-# Shell function
-shell_list_log() {
+# SHELL list function
+shell_list() {
+    echo "$lines"
+}
+
+# PLAIN list function
+plain_list() {
     echo "$lines"
 }
 
+# CSV list function
+csv_list() {
+    echo "LOG"
+    echo "$lines"
+}
+
+
 #----------------------------------------------------------#
 #                    Verifications                         #
 #----------------------------------------------------------#
 
 check_args '2' "$#" 'USER DOMAIN [LINES] [FORMAT]'
-validate_format 'user' 'domain' 'ttl'
+is_format_valid 'user' 'domain' 'ttl'
 is_object_valid 'user' 'USER' "$user"
 is_object_valid 'web' 'DOMAIN' "$domain"
 
@@ -63,14 +75,14 @@ else
 fi
 
 lines=$($read_cmd /var/log/$WEB_SYSTEM/domains/$domain.error.log)
-counter=$(echo "$lines" |wc -l)
 IFS=$'\n'
 
-# Listing logs
+# Listing data
 case $format in
-    json)   json_list_log ;;
-    plain)  shell_list_log ;;
-    shell)  shell_list_log ;;
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 79 - 14
bin/v-list-web-domain-ssl

@@ -17,19 +17,25 @@ format=${3-shell}
 # Includes
 source $VESTA/func/main.sh
 
-# Json function
-json_list_ssl() {
-    i='1'       # iterator
+# JSON list function
+json_list() {
     echo '{'
     echo -e "\t\"$domain\": {"
     echo "        \"CRT\": \"$crt\","
     echo "        \"KEY\": \"$key\","
-    echo "        \"CA\": \"$ca\""
+    echo "        \"CA\": \"$ca\","
+    echo "        \"SUBJECT\": \"$subj\","
+    echo "        \"ALIASES\": \"$alt_dns\","
+    echo "        \"NOT_BEFORE\": \"$before\","
+    echo "        \"NOT_AFTER\": \"$after\","
+    echo "        \"SIGNATURE\": \"$signature\","
+    echo "        \"PUB_KEY\": \"$pub_key\","
+    echo "        \"ISSUER\": \"$issuer\""
     echo -e "\t}\n}"
 }
 
-# Shell function
-shell_list_ssl() {
+# SHELL list function
+shell_list() {
     if [ ! -z "$crt" ]; then
         echo -e "$crt"
     fi
@@ -39,6 +45,50 @@ shell_list_ssl() {
     if [ ! -z "$ca" ]; then
         echo -e "\n$ca"
     fi
+    if [ ! -z "$crt" ]; then
+        echo
+        echo
+        echo "SUBJECT:        $subj"
+        if [ ! -z "$alt_dns" ]; then
+            echo "ALIASES:        ${alt_dns//,/ }"
+        fi
+        echo "VALID FROM:     $before"
+        echo "VALID TIL:      $after"
+        echo "SIGNATURE:      $signature"
+        echo "PUB_KEY:        $pub_key"
+        echo "ISSUER:         $issuer"
+    fi
+}
+
+# PLAIN list function
+plain_list() {
+    if [ ! -z "$crt" ]; then
+        echo -e "$crt"
+    fi
+    if [ ! -z "$key" ]; then
+        echo -e "\n$key"
+    fi
+    if [ ! -z "$ca" ]; then
+        echo -e "\n$ca"
+    fi
+    if [ ! -z "$crt" ]; then
+        echo "$subj"
+        echo "${alt_dns//,/ }"
+        echo "$before"
+        echo "$after"
+        echo "$signature"
+        echo "$pub_key"
+        echo "$issuer"
+    fi
+
+}
+
+# CSV list function
+csv_list() {
+    echo -n "CRT,KEY,CA,SUBJECT,ALIASES,NOT_BEFORE,NOT_AFTER,SIGNATURE,"
+    echo "PUB_KEY,ISSUER"
+    echo -n "\"$crt\",\"$key\",\"$ca\",\"$subj\",\"${alt_dns//,/ }\","
+    echo "\"$before\",\"$after\",\"$signature\",\"$pub_key\",\"$issuer\""
 }
 
 
@@ -50,27 +100,42 @@ check_args '2' "$#" 'USER DOMAIN [FORMAT]'
 is_object_valid 'user' 'USER' "$user"
 is_object_valid 'web' 'DOMAIN' "$domain"
 
+
 #----------------------------------------------------------#
 #                       Action                             #
 #----------------------------------------------------------#
+
+# Parsing domain SSL certificate
 if [ -e "$USER_DATA/ssl/$domain.crt" ]; then
-    crt=$(cat $USER_DATA/ssl/$domain.crt | sed ':a;N;$!ba;s/\n/\\n/g' )
+    crt=$(cat $USER_DATA/ssl/$domain.crt |sed ':a;N;$!ba;s/\n/\\n/g')
+
+    info=$(openssl x509 -text -in $USER_DATA/ssl/$domain.crt)
+    subj=$(echo "$info" |grep Subject: |cut -f 2 -d =)
+    before=$(echo "$info" |grep Before: |sed -e "s/.*Before: //")
+    after=$(echo "$info" |grep "After :" |sed -e "s/.*After : //")
+    signature=$(echo "$info" |grep "Algorithm:" |head -n1 )
+    signature=$(echo "$signature"| sed -e "s/.*Algorithm: //")
+    pub_key=$(echo "$info" |grep Public-Key: |cut -f2 -d \( | tr -d \))
+    issuer=$(echo "$info" |grep Issuer: |sed -e "s/.*Issuer: //")
+    alt_dns=$(echo "$info" |grep DNS |sed -e 's/DNS:/\n/g' |tr -d ',')
+    alt_dns=$(echo "$alt_dns" |tr -d ' ' |sed -e "/^$/d")
+    alt_dns=$(echo "$alt_dns" |sed -e ':a;N;$!ba;s/\n/,/g')
 fi
 
 if [ -e "$USER_DATA/ssl/$domain.key" ]; then
-    key=$(cat $USER_DATA/ssl/$domain.key | sed ':a;N;$!ba;s/\n/\\n/g' )
+    key=$(cat $USER_DATA/ssl/$domain.key |sed ':a;N;$!ba;s/\n/\\n/g')
 fi
 
 if [ -e "$USER_DATA/ssl/$domain.ca" ]; then
-    ca=$(cat $USER_DATA/ssl/$domain.ca | sed ':a;N;$!ba;s/\n/\\n/g' )
+    ca=$(cat $USER_DATA/ssl/$domain.ca |sed ':a;N;$!ba;s/\n/\\n/g')
 fi
 
-# Listing domains
+# Listing data
 case $format in
-    json)   json_list_ssl ;;
-    plain)  nohead=1; shell_list_ssl ;;
-    shell)  shell_list_ssl ;;
-    *)      check_args '1' '0' '[FORMAT]'
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 83 - 16
bin/v-list-web-domains

@@ -2,7 +2,7 @@
 # info: list web domains
 # options: USER [FORMAT]
 #
-# The function of obtaining the list of all user domains.
+# The function to obtain the list of all user web domains.
 
 
 #----------------------------------------------------------#
@@ -16,13 +16,89 @@ format=${2-shell}
 # Includes
 source $VESTA/func/main.sh
 
+# JSON list function
+json_list() {
+    IFS=$'\n'
+    i=1
+    objects=$(grep DOMAIN $USER_DATA/web.conf |wc -l)
+    echo "{"
+    while read str; do
+        eval $str
+        echo -n '    "'$DOMAIN'": {
+        "IP": "'$IP'",
+        "IP6": "'$IP6'",
+        "U_DISK": "'$U_DISK'",
+        "U_BANDWIDTH": "'$U_BANDWIDTH'",
+        "TPL": "'$TPL'",
+        "ALIAS": "'$ALIAS'",
+        "STATS": "'$STATS'",
+        "STATS_USER": "'$STATS_USER'",
+        "SSL": "'$SSL'",
+        "SSL_HOME": "'$SSL_HOME'",
+        "FTP_USER": "'$FTP_USER'",
+        "FTP_PATH": "'$FTP_PATH'",
+        "AUTH_USER": "'$AUTH_USER'",
+        "BACKEND": "'$BACKEND'",
+        "PROXY": "'$PROXY'",
+        "PROXY_EXT": "'$PROXY_EXT'",
+        "SUSPENDED": "'$SUSPENDED'",
+        "TIME": "'$TIME'",
+        "DATE": "'$DATE'"
+    }'
+        if [ "$i" -lt "$objects" ]; then
+            echo ','
+        else
+            echo
+        fi
+        ((i++))
+    done < <(cat $USER_DATA/web.conf)
+    echo '}'
+}
+
+# SHELL list function
+shell_list() {
+    IFS=$'\n'
+    echo "DOMAIN   IP   TPL   SSL   DISK   BW   SPND   DATE"
+    echo "------   --   ---   ---   ----   --   ----   ----"
+    while read str; do
+        eval $str
+        echo "$DOMAIN $IP $TPL $SSL $U_DISK $U_BANDWIDTH $SUSPENDED $DATE"
+    done < <(cat $USER_DATA/web.conf)
+}
+
+# PLAIN list function
+plain_list() {
+    IFS=$'\n'
+    while read str; do
+        eval $str
+        echo -ne "$DOMAIN\t$IP\t$IP6\t$U_DISK\t$U_BANDWIDTH\t$TPL\t"
+        echo -ne "$ALIAS\t$STATS\t$STATS_USER\t$SSL\t$SSL_HOME\t"
+        echo -ne "$FTP_USER\t$FTP_PATH\t$AUTH_USER\t$BACKEND\t$PROXY\t"
+        echo -e "$PROXY_EXT\t$SUSPENDED\t$TIME\t$DATE"
+    done < <(cat $USER_DATA/web.conf)
+}
+
+# CSV list function
+csv_list() {
+    IFS=$'\n'
+    echo -n "DOMAIN,IP,IP6,U_DISK,U_BANDWIDTH,TPL,ALIAS,STATS,STATS_USER,"
+    echo -n "SSL,SSL_HOME,FTP_USER,FTP_PATH,AUTH_USER,BACKEND,PROXY,"
+    echo "PROXY_EXT,SUSPENDED,TIME,DATE"
+    while read str; do
+        eval $str
+        echo -n "$DOMAIN,$IP,$IP6,$U_DISK,$U_BANDWIDTH,$TPL,"
+        echo -n "\"$ALIAS\",$STATS,\"$STATS_USER\",$SSL,$SSL_HOME,"
+        echo -n "\"$FTP_USER\",\"$FTP_PATH\",\"$AUTH_USER\",$BACKEND,$PROXY,"
+        echo "\"$PROXY_EXT\",$SUSPENDED,$TIME,$DATE"
+    done < <(cat $USER_DATA/web.conf)
+}
+
 
 #----------------------------------------------------------#
 #                    Verifications                         #
 #----------------------------------------------------------#
 
 check_args '1' "$#" 'USER [FORMAT]'
-validate_format 'user'
 is_object_valid 'user' 'USER' "$user"
 
 
@@ -30,21 +106,12 @@ is_object_valid 'user' 'USER' "$user"
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Defining config
-conf=$USER_DATA/web.conf
-
-# Defining fileds to select
-fields="\$DOMAIN \$IP \$IP6 \$U_DISK \$U_BANDWIDTH \$TPL \$ALIAS \$STATS"
-fields="$fields \$STATS_USER \$SSL \$SSL_HOME \$FTP_USER \$FTP_PATH \$AUTH_USER"
-fields="$fields \$BACKEND \$PROXY \$PROXY_EXT \$SUSPENDED \$TIME \$DATE"
-
-# Listing domains
-case $format in 
+# Listing data
+case $format in
     json)   json_list ;;
-    plain)  nohead=1; shell_list ;;
-    shell)  fields='$DOMAIN $IP $U_DISK $U_BANDWIDTH $TPL $DATE';
-            shell_list | column -t ;;
-    *)      check_args '1' '0' 'USER [FORMAT]'
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list |column -t ;;
 esac
 
 

+ 37 - 23
bin/v-list-web-stats

@@ -16,32 +16,43 @@ format=${1-shell}
 source $VESTA/func/main.sh
 source $VESTA/conf/vesta.conf
 
-# Json function
-json_list_st() {
-    stats=$(echo "${STATS_SYSTEM//,/ } none")
-    st_counter=$(echo "$stats" | wc -w)
+# JSON list function
+json_list() {
+    objects=$(echo "$stats" | wc -w)
     i=1
     echo '['
-    for st in $stats; do
-        if [ "$i" -lt "$st_counter" ]; then
-            echo -e  "\t\"$st\","
+    for str in $stats; do
+        if [ "$i" -lt "$objects" ]; then
+            echo -e  "\t\"$str\","
         else
-            echo -e  "\t\"$st\""
+            echo -e  "\t\"$str\""
         fi
         (( ++i))
     done
     echo "]"
 }
 
-# Shell function
-shell_list_st() {
-    stats=$(echo "none ${STATS_SYSTEM//,/ }")
-    if [ -z "$nohead" ]; then
-        echo "STATS"
-        echo "----------"
-    fi
-    for st in $stats; do
-        echo "$st"
+# SHELL list function
+shell_list() {
+    echo "PARSER"
+    echo "------"
+    for parser in $stats; do
+        echo "$parser"
+    done
+}
+
+# PLAIN list function
+plain_list() {
+    for parser in $stats; do
+        echo "$parser"
+    done
+}
+
+# CSV list function
+csv_list() {
+    echo "PARSER"
+    for parser in $stats; do
+        echo "$parser"
     done
 }
 
@@ -50,12 +61,15 @@ shell_list_st() {
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Listing domains
-case $format in 
-    json)   json_list_st ;;
-    plain)  nohead=1; shell_list_st ;;
-    shell)  shell_list_st ;;
-    *)      check_args '1' '0' '[FORMAT]' ;;
+# Parsing stats system
+stats=$(echo "none ${STATS_SYSTEM//,/ }")
+
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 31 - 19
bin/v-list-web-templates

@@ -16,15 +16,13 @@ format=${1-shell}
 source $VESTA/func/main.sh
 source $VESTA/conf/vesta.conf
 
-# Json function
-json_list_wtpl() {
-    templates=$(ls -v $WEBTPL/$WEB_SYSTEM/$WEB_BACKEND/)
-    templates=$(echo "$templates" | grep '\.tpl' | sed 's/\.tpl$//')
-    t_counter=$(echo "$templates" | wc -w)
+# JSON list function
+json_list() {
+    objects=$(echo "$templates" |wc -w)
     i=1
     echo '['
     for template in $templates; do
-        if [ "$i" -lt "$t_counter" ]; then
+        if [ "$i" -lt "$objects" ]; then
             echo -e  "\t\"$template\","
         else
             echo -e  "\t\"$template\""
@@ -34,31 +32,45 @@ json_list_wtpl() {
     echo "]"
 }
 
-# Shell function
-shell_list_wtpl() {
-    templates=$(ls -v $WEBTPL/$WEB_SYSTEM/$WEB_BACKEND/)
-    templates=$(echo "$templates" | grep '\.tpl' | sed 's/\.tpl$//')
-    if [ -z "$nohead" ]; then
-        echo "Templates"
-        echo "----------"
-    fi
+# SHELL list function
+shell_list() {
+    echo "TEMPLATE"
+    echo "--------"
     for template in $templates; do
         echo "$template"
     done
 }
 
+# PLAIN list function
+plain_list() {
+    for template in $templates; do
+        echo "$template"
+    done
+}
+
+# CSV list function
+csv_list() {
+    echo "TEMPLATE"
+    for template in $templates; do
+        echo "$template"
+    done
+}
 
 
 #----------------------------------------------------------#
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Listing domains
+# Parsing templates
+templates=$(ls -v $WEBTPL/$WEB_SYSTEM/$WEB_BACKEND/)
+templates=$(echo "$templates" |grep '\.tpl' |sed 's/\.tpl$//')
+
+# Listing data
 case $format in
-    json)   json_list_wtpl ;;
-    plain)  nohead=1; shell_list_wtpl ;;
-    shell)  shell_list_wtpl ;;
-    *)      check_args '1' '0' '[FORMAT]'
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 35 - 23
bin/v-list-web-templates-backend

@@ -16,13 +16,13 @@ format=${1-shell}
 source $VESTA/func/main.sh
 source $VESTA/conf/vesta.conf
 
-# Json function
-json_list_wtpl() {
-    t_counter=$(echo "$templates" | wc -w)
+# JSON list function
+json_list() {
     i=1
+    objects=$(echo "$templates" |wc -w)
     echo '['
     for template in $templates; do
-        if [ "$i" -lt "$t_counter" ]; then
+        if [ "$i" -lt "$objects" ]; then
             echo -e  "\t\"$template\","
         else
             echo -e  "\t\"$template\""
@@ -30,14 +30,27 @@ json_list_wtpl() {
         (( ++i))
     done
     echo "]"
-    }
+}
+
+# SHELL list function
+shell_list() {
+    echo "TEMPLATE"
+    echo "--------"
+    for template in $templates; do
+        echo "$template"
+    done
+}
+
+# PLAIN list function
+plain_list() {
+    for template in $templates; do
+        echo "$template"
+    done
+}
 
-# Shell function
-shell_list_wtpl() {
-    if [ -z "$nohead" ]; then
-        echo "Templates"
-        echo "----------"
-    fi
+# CSV list function
+csv_list() {
+    echo "TEMPLATE"
     for template in $templates; do
         echo "$template"
     done
@@ -48,21 +61,20 @@ shell_list_wtpl() {
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Proxy templates
-if [ -z "$WEB_BACKEND" ]; then
-    exit
+# Parsing backend templates
+if [ ! -z "$WEB_BACKEND" ]; then
+    templates=$(ls -t $WEBTPL/$WEB_BACKEND |\
+        cut -f1 -d . |\
+        grep -v proxy_ip |\
+        sort -u )
 fi
-templates=$(ls -t $WEBTPL/$WEB_BACKEND |\
-    cut -f1 -d . |\
-    grep -v proxy_ip |\
-    sort -u )
 
-# Listing domains
+# Listing data
 case $format in
-    json)   json_list_wtpl ;;
-    plain)  nohead=1; shell_list_wtpl ;;
-    shell)  shell_list_wtpl ;;
-    *)      check_args '1' '0' '[FORMAT]'
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac
 
 

+ 35 - 23
bin/v-list-web-templates-proxy

@@ -16,13 +16,13 @@ format=${1-shell}
 source $VESTA/func/main.sh
 source $VESTA/conf/vesta.conf
 
-# Json function
-json_list_wtpl() {
-    t_counter=$(echo "$templates" | wc -w)
+# JSON list function
+json_list() {
+    objects=$(echo "$templates" |wc -w)
     i=1
     echo '['
     for template in $templates; do
-        if [ "$i" -lt "$t_counter" ]; then
+        if [ "$i" -lt "$objects" ]; then
             echo -e  "\t\"$template\","
         else
             echo -e  "\t\"$template\""
@@ -30,14 +30,27 @@ json_list_wtpl() {
         (( ++i))
     done
     echo "]"
-    }
+}
+
+# SHELL list function
+shell_list() {
+    echo "TEMPLATE"
+    echo "--------"
+    for template in $templates; do
+        echo "$template"
+    done
+}
+
+# PLAIN list function
+plain_list() {
+    for template in $templates; do
+        echo "$template"
+    done
+}
 
-# Shell function
-shell_list_wtpl() {
-    if [ -z "$nohead" ]; then
-        echo "Templates"
-        echo "----------"
-    fi
+# CSV list function
+csv_list() {
+    echo "TEMPLATE"
     for template in $templates; do
         echo "$template"
     done
@@ -48,21 +61,20 @@ shell_list_wtpl() {
 #                       Action                             #
 #----------------------------------------------------------#
 
-# Proxy templates
-if [ -z "$PROXY_SYSTEM" ]; then
-    exit
+# Parsing proxy templates
+if [ ! -z "$PROXY_SYSTEM" ]; then
+    templates=$(ls -t $WEBTPL/$PROXY_SYSTEM |\
+        cut -f1 -d . |\
+        grep -v proxy_ip |\
+        sort -u )
 fi
-templates=$(ls -t $WEBTPL/$PROXY_SYSTEM |\
-    cut -f1 -d . |\
-    grep -v proxy_ip |\
-    sort -u )
 
-# Listing domains
+# Listing data
 case $format in
-    json)   json_list_wtpl ;;
-    plain)  nohead=1; shell_list_wtpl ;;
-    shell)  shell_list_wtpl ;;
-    *)      check_args '1' '0' '[FORMAT]'
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
 esac