v-search-user-object 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. #!/bin/bash
  2. # info: search objects
  3. # options: USER OBJECT [FORMAT]
  4. #
  5. # The function that allows to find user objects.
  6. #----------------------------------------------------------#
  7. # Variable&Function #
  8. #----------------------------------------------------------#
  9. # Argument definition
  10. user=$1
  11. object=$2
  12. format=${3-shell}
  13. # Includes
  14. source $VESTA/func/main.sh
  15. source $VESTA/conf/vesta.conf
  16. # Json list function
  17. json_list_search() {
  18. echo '{'
  19. fileds_count=$(echo $fields| wc -w )
  20. while read line; do
  21. eval $line
  22. if [ -n "$list_data" ]; then
  23. echo -e ' },'
  24. fi
  25. i=1
  26. IFS=' '
  27. for field in $fields; do
  28. eval value=\"$field\"
  29. value=$(echo "$value"|sed -e 's/"/\\"/g' -e "s/%quote%/'/g")
  30. if [ $i -eq 1 ]; then
  31. (( ++i))
  32. echo -e "\t\"$value\": {"
  33. else
  34. if [ $i -lt $fileds_count ]; then
  35. (( ++i))
  36. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
  37. else
  38. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
  39. list_data=1
  40. fi
  41. fi
  42. done
  43. done < $conf
  44. if [ -n "$list_data" ]; then
  45. echo -e ' }'
  46. fi
  47. echo -e '}'
  48. }
  49. # Shell list function
  50. shell_list_search() {
  51. if [ -z "$nohead" ] ; then
  52. echo "${fields//$/}"
  53. for a in $fields; do
  54. echo -e "------ \c"
  55. done
  56. echo
  57. fi
  58. while read line ; do
  59. eval $line
  60. eval echo "$fields" | sed "s/%quote%/'/g"
  61. done < $conf
  62. }
  63. #----------------------------------------------------------#
  64. # Verifications #
  65. #----------------------------------------------------------#
  66. check_args '2' "$#" 'USER OBJECT [FORMAT]'
  67. is_format_valid 'user' 'object'
  68. is_object_valid 'user' 'USER' "$user"
  69. #----------------------------------------------------------#
  70. # Action #
  71. #----------------------------------------------------------#
  72. conf=$(mktemp)
  73. i=0
  74. OLD_IFS=$IFS
  75. IFS=$'\n'
  76. # Search query
  77. search=$(grep "$object" \
  78. $VESTA/data/users/$user/web.conf \
  79. $VESTA/data/users/$user/dns.conf \
  80. $VESTA/data/users/$user/dns/*.conf \
  81. $VESTA/data/users/$user/mail.conf \
  82. $VESTA/data/users/$user/mail/*.conf \
  83. $VESTA/data/users/$user/db.conf \
  84. $VESTA/data/users/$user/cron.conf 2> /dev/null)
  85. for row in $search; do
  86. # Initialise variable
  87. key=''
  88. result=''
  89. dom_alias=''
  90. suspended=''
  91. object_link=''
  92. object_parent=''
  93. object_time=''
  94. object_date=''
  95. # Parsing result
  96. type=$(echo $row |cut -f 1 -d : |cut -f 8 -d /)
  97. data=$(echo $row |cut -f 2,3,4,5 -d :)
  98. eval "$data"
  99. # Check WEB domain
  100. if [ "$type" = 'web.conf' ]; then
  101. if [ -n "$(echo $DOMAIN |grep $object)" ]; then
  102. # Check domain alias
  103. check_alias="$(echo $ALIAS| tr ',' '\n' |grep $object)"
  104. if [ ! -z "$check_alias" ];then
  105. dom_alias=$(echo $check_alias | tr ' ' ',')
  106. fi
  107. key="DOMAIN"
  108. result="$DOMAIN"
  109. suspended=$SUSPENDED
  110. object_time=$TIME
  111. object_date=$DATE
  112. ((i ++))
  113. else
  114. check_alias="$(echo $ALIAS| tr ',' '\n' |grep $object)"
  115. if [ ! -z "$check_alias" ];then
  116. key="DOMAIN"
  117. result="$DOMAIN"
  118. object_parent="$DOMAIN"
  119. dom_alias=$(echo $check_alias | tr ' ' ',')
  120. suspended=$SUSPENDED
  121. object_time=$TIME
  122. object_date=$DATE
  123. ((i ++))
  124. fi
  125. fi
  126. fi
  127. # DNS
  128. if [ "$type" = 'dns.conf' ]; then
  129. if [ -n "$(echo $DOMAIN |grep $object)" ]; then
  130. key="DOMAIN"
  131. result="$DOMAIN"
  132. suspended=$SUSPENDED
  133. object_time=$TIME
  134. object_date=$DATE
  135. ((i ++))
  136. fi
  137. fi
  138. # DNS Records
  139. if [ "$type" = 'dns' ]; then
  140. if [ -n "$(echo $RECORD |grep $object)" ]; then
  141. key="RECORD"
  142. result="$RECORD.$DOMAIN"
  143. suspended=$SUSPENDED
  144. object_link=$ID
  145. object_parent=$DOMAIN
  146. object_time=$TIME
  147. object_date=$DATE
  148. ((i ++))
  149. fi
  150. fi
  151. # MAIL
  152. if [ "$type" = 'mail.conf' ]; then
  153. if [ -n "$(echo $DOMAIN |grep $object)" ]; then
  154. key="DOMAIN"
  155. result="$DOMAIN"
  156. suspended=$SUSPENDED
  157. object_time=$TIME
  158. object_date=$DATE
  159. ((i ++))
  160. fi
  161. fi
  162. # Mail Accounts
  163. if [ "$type" = 'mail' ]; then
  164. type='mail'
  165. if [ -n "$(echo $ACCOUNT |grep $object)" ]; then
  166. key="ACCOUNT"
  167. dom="$(echo $row|cut -f 1 -d :|cut -f 9 -d /|sed 's/.conf//')"
  168. result="$ACCOUNT@$dom"
  169. suspended=$SUSPENDED
  170. object_link=$ACCOUNT
  171. object_parent=$dom
  172. object_time=$TIME
  173. object_date=$DATE
  174. ((i ++))
  175. fi
  176. fi
  177. # DB
  178. if [ "$type" = 'db.conf' ]; then
  179. if [ -n "$(echo $DB |grep $object)" ]; then
  180. key="DATABASE"
  181. result="$DB"
  182. suspended=$SUSPENDED
  183. object_time=$TIME
  184. object_date=$DATE
  185. ((i ++))
  186. fi
  187. fi
  188. # Cron Jobs
  189. if [ "$type" = 'cron.conf' ]; then
  190. if [ -n "$(echo $CMD |grep $object)" ]; then
  191. key="JOB"
  192. result="$CMD"
  193. suspended=$SUSPENDED
  194. object_link=$JOB
  195. object_parent=$JOB
  196. object_time=$TIME
  197. object_date=$DATE
  198. ((i ++))
  199. fi
  200. fi
  201. if [ ! -z "$result" ]; then
  202. type=$(echo $type|cut -f1 -d \.)
  203. str="ID='$i' USER='$user' TYPE='$type' KEY='$key'"
  204. str="$str RESULT='$result' ALIAS='$dom_alias'"
  205. str="$str LINK='$object_link' PARENT='$object_parent'"
  206. str="$str SUSPENDED='$suspended' TIME='$object_time'"
  207. str="$str DATE='$object_date'"
  208. echo $str >> $conf
  209. fi
  210. done
  211. IFS=$OLD_IFS
  212. # Defining fileds to select
  213. fields='$ID $USER $TYPE $KEY $RESULT $ALIAS $LINK $PARENT $SUSPENDED $TIME'
  214. fields="$fields \$DATE"
  215. # Listing domains
  216. case $format in
  217. json) json_list_search ;;
  218. plain) nohead=1; shell_list_search ;;
  219. shell) fields='$USER~$TYPE~$KEY~$RESULT~$ALIAS';
  220. shell_list |column -t -s '~' ;;
  221. *) check_args '2' '0' 'USER OBJECT [FORMAT]'
  222. esac
  223. rm $conf
  224. #----------------------------------------------------------#
  225. # Vesta #
  226. #----------------------------------------------------------#
  227. # Logging
  228. #log_event "$OK" "$ARGUMENTS"
  229. exit