remote.sh 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. #!/bin/bash
  2. #===========================================================================#
  3. # #
  4. # Hestia Control Panel - API Function Library #
  5. # #
  6. #===========================================================================#
  7. # Check if script already running or not
  8. is_procces_running() {
  9. SCRIPT=$(basename $0)
  10. for pid in $(pidof -x $SCRIPT); do
  11. if [ $pid != $$ ]; then
  12. check_result "$E_INUSE" "$SCRIPT is already running"
  13. fi
  14. done
  15. }
  16. send_api_cmd() {
  17. if [ -n "$PASSWORD" ]; then
  18. answer=$(curl -s -k \
  19. --data-urlencode "user=$USER" \
  20. --data-urlencode "password=$PASSWORD" \
  21. --data-urlencode "returncode=yes" \
  22. --data-urlencode "cmd=$1" \
  23. --data-urlencode "arg1=$2" \
  24. --data-urlencode "arg2=$3" \
  25. --data-urlencode "arg3=$4" \
  26. --data-urlencode "arg4=$5" \
  27. --data-urlencode "arg5=$6" \
  28. --data-urlencode "arg6=$7" \
  29. --data-urlencode "arg7=$8" \
  30. --data-urlencode "arg8=$9" \
  31. https://$HOST:$PORT/api/)
  32. else
  33. answer=$(curl -s -k \
  34. --data-urlencode "hash=$HASH" \
  35. --data-urlencode "returncode=yes" \
  36. --data-urlencode "cmd=$1" \
  37. --data-urlencode "arg1=$2" \
  38. --data-urlencode "arg2=$3" \
  39. --data-urlencode "arg3=$4" \
  40. --data-urlencode "arg4=$5" \
  41. --data-urlencode "arg5=$6" \
  42. --data-urlencode "arg6=$7" \
  43. --data-urlencode "arg7=$8" \
  44. --data-urlencode "arg8=$9" \
  45. https://$HOST:$PORT/api/)
  46. fi
  47. if [ "$DEBUG_MODE" = "yes" ]; then
  48. # log out going request if wanted for debugging
  49. echo "$1 $2 $3 $4 $5 $6 $7 $8 $9" >> /var/log/hestia/api_out.log
  50. fi
  51. return $answer
  52. }
  53. send_api_file() {
  54. if [ -n "$PASSWORD" ]; then
  55. answer=$(curl -s -k \
  56. --data-urlencode "user=$USER" \
  57. --data-urlencode "password=$PASSWORD" \
  58. --data-urlencode "returncode=yes" \
  59. --data-urlencode "cmd=v-make-tmp-file" \
  60. --data-urlencode "arg1=$(cat $1)" \
  61. --data-urlencode "arg2=$2" \
  62. https://$HOST:$PORT/api/)
  63. else
  64. answer=$(curl -s -k \
  65. --data-urlencode "hash=$HASH" \
  66. --data-urlencode "returncode=yes" \
  67. --data-urlencode "cmd=v-make-tmp-file" \
  68. --data-urlencode "arg1=$(cat $1)" \
  69. --data-urlencode "arg2=$2" \
  70. https://$HOST:$PORT/api/)
  71. fi
  72. return $answer
  73. }
  74. send_ssh_cmd() {
  75. if [ -z "$IDENTITY_FILE" ] && [ "$USER" = 'root' ]; then
  76. IDENTITY_FILE="/root/.ssh/id_rsa"
  77. fi
  78. if [ -z "$IDENTITY_FILE" ]; then
  79. IDENTITY_FILE="/home/$USER/.ssh/id_rsa"
  80. fi
  81. if [ "$USER" = 'root' ]; then
  82. args="$BIN/$1 \"$2\" \"$3\" \"$4\" \"$5\""
  83. else
  84. args="sudo $BIN/$1 \"$2\" \"$3\" \"$4\" \"$5\""
  85. fi
  86. ssh -i $IDENTITY_FILE $USER@$HOST -p $PORT "$args" > /dev/null 2>&1
  87. if [ "$?" -ne '0' ]; then
  88. return 1
  89. else
  90. return 0
  91. fi
  92. }
  93. send_scp_file() {
  94. if [ -z "$IDENTITY_FILE" ] && [ "$USER" = 'root' ]; then
  95. IDENTITY_FILE="/root/.ssh/id_rsa"
  96. fi
  97. if [ -z "$IDENTITY_FILE" ]; then
  98. IDENTITY_FILE="/home/$USER/.ssh/id_rsa"
  99. fi
  100. scp -P $PORT -i $IDENTITY_FILE $1 $USER@$HOST:$2 > /dev/null 2>&1
  101. if [ "$?" -ne '0' ]; then
  102. return 1
  103. else
  104. return 0
  105. fi
  106. }
  107. is_dnshost_new() {
  108. if [ -e "$HESTIA/conf/dns-cluster.conf" ]; then
  109. check_host=$(grep "HOST='$host'" $HESTIA/conf/dns-cluster.conf)
  110. if [ -n "$check_host" ]; then
  111. check_result $E_EXISTS "remote dns host $host exists"
  112. fi
  113. fi
  114. }
  115. is_dnshost_alive() {
  116. cluster_cmd v-list-sys-config
  117. check_result $? "$type connection to $HOST failed" "$E_CONNECT"
  118. cluster_cmd v-list-user "$DNS_USER"
  119. check_result $? "$DNS_USER doesn't exist" "$E_CONNECT"
  120. }
  121. remote_dns_health_check() {
  122. OLD_IFS="$IFS"
  123. IFS=$'\n'
  124. # Starting health-check
  125. for str in $(grep "SUSPENDED='no'" $HESTIA/conf/dns-cluster.conf); do
  126. # Reset user, password and hash vars
  127. clear_dns_cluster_settings
  128. # Parsing host values
  129. parse_object_kv_list "$str"
  130. # Checking host connection
  131. cluster_cmd v-list-user "$DNS_USER"
  132. if [ $? -ne 0 ]; then
  133. # Creating error report
  134. tmpfile=$(mktemp)
  135. echo "$(basename $0) $*" > $tmpfile
  136. echo -e "Error: $TYPE connection to $HOST failed.\n" >> $tmpfile
  137. echo -n "Remote dns host has been suspended." >> $tmpfile
  138. echo -n "After resolving issue run " >> $tmpfile
  139. echo -e "following commands:\n" >> $tmpfile
  140. echo "v-unsuspend-remote-dns-host $HOST" >> $tmpfile
  141. echo "v-sync-dns-cluster $HOST" >> $tmpfile
  142. echo -e "\n\n--\nHestia Control Panel\n$(hostname)" >> $tmpfile
  143. if [ "$1" = 'no_email' ]; then
  144. cat $tmpfile
  145. else
  146. subj="DNS sync failed"
  147. email=$($BIN/v-get-user-value "$ROOT_USER" CONTACT)
  148. cat $tmpfile | $SENDMAIL -s "$subj" $email
  149. fi
  150. # Deleting tmp file
  151. rm -f $tmpfile
  152. log_event "$E_CONNECT" "$ARGUMENTS"
  153. # Suspending remote host
  154. dconf="../../../conf/dns-cluster"
  155. update_object_value "$dconf" 'HOST' "$HOST" '$SUSPENDED' 'yes'
  156. fi
  157. done
  158. IFS="$OLD_IFS"
  159. }
  160. cluster_cmd() {
  161. case $TYPE in
  162. ssh) send_ssh_cmd $* ;;
  163. api) send_api_cmd $* ;;
  164. esac
  165. }
  166. cluster_file() {
  167. case $TYPE in
  168. ssh) send_scp_file $* ;;
  169. api) send_api_file $* ;;
  170. esac
  171. }
  172. clear_dns_cluster_settings() {
  173. unset USER
  174. unset PASSWORD
  175. unset HASH
  176. }