You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					270 lines
				
				6.0 KiB
			
		
		
			
		
	
	
					270 lines
				
				6.0 KiB
			| 
								 
											2 years ago
										 
									 | 
							
								#!/bin/bash
							 | 
						||
| 
								 | 
							
								# info: search objects
							 | 
						||
| 
								 | 
							
								# options: OBJECT [FORMAT]
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# example: v-search-object example.com json
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# This function that allows to find system objects.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								#                Variables & Functions                     #
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Argument definition
							 | 
						||
| 
								 | 
							
								object=$1
							 | 
						||
| 
								 | 
							
								format=${2-shell}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Includes
							 | 
						||
| 
								 | 
							
								# shellcheck source=/etc/hestiacp/hestia.conf
							 | 
						||
| 
								 | 
							
								source /etc/hestiacp/hestia.conf
							 | 
						||
| 
								 | 
							
								# shellcheck source=/usr/local/hestia/func/main.sh
							 | 
						||
| 
								 | 
							
								source $HESTIA/func/main.sh
							 | 
						||
| 
								 | 
							
								# shellcheck source=/usr/local/hestia/conf/hestia.conf
							 | 
						||
| 
								 | 
							
								source $HESTIA/conf/hestia.conf
							 | 
						||
| 
								 | 
							
								# load config file
							 | 
						||
| 
								 | 
							
								source_conf "$HESTIA/conf/hestia.conf"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Perform verification if read-only mode is enabled
							 | 
						||
| 
								 | 
							
								check_hestia_demo_mode
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Json list function
							 | 
						||
| 
								 | 
							
								json_list_search() {
							 | 
						||
| 
								 | 
							
									echo '{'
							 | 
						||
| 
								 | 
							
									fileds_count=$(echo $fields | wc -w)
							 | 
						||
| 
								 | 
							
									while read line; do
							 | 
						||
| 
								 | 
							
										eval $line
							 | 
						||
| 
								 | 
							
										if [ -n "$list_data" ]; then
							 | 
						||
| 
								 | 
							
											echo -e '        },'
							 | 
						||
| 
								 | 
							
										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//,/, }\""
							 | 
						||
| 
								 | 
							
													list_data=1
							 | 
						||
| 
								 | 
							
												fi
							 | 
						||
| 
								 | 
							
											fi
							 | 
						||
| 
								 | 
							
										done
							 | 
						||
| 
								 | 
							
									done < $conf
							 | 
						||
| 
								 | 
							
									if [ -n "$list_data" ]; then
							 | 
						||
| 
								 | 
							
										echo -e '        }'
							 | 
						||
| 
								 | 
							
									fi
							 | 
						||
| 
								 | 
							
									echo -e '}'
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Shell list function
							 | 
						||
| 
								 | 
							
								shell_list_search() {
							 | 
						||
| 
								 | 
							
									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
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								#                    Verifications                         #
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								check_args '1' "$#" 'OBJECT [FORMAT]'
							 | 
						||
| 
								 | 
							
								is_format_valid 'object'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								#                       Action                             #
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								conf=$(mktemp)
							 | 
						||
| 
								 | 
							
								i=0
							 | 
						||
| 
								 | 
							
								OLD_IFS=$IFS
							 | 
						||
| 
								 | 
							
								IFS=$'\n'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# User loop
							 | 
						||
| 
								 | 
							
								for user in $($BIN/v-list-sys-users plain); do
							 | 
						||
| 
								 | 
							
									# Search query
							 | 
						||
| 
								 | 
							
									search=$(grep "$object" \
							 | 
						||
| 
								 | 
							
										$HESTIA/data/users/$user/web.conf \
							 | 
						||
| 
								 | 
							
										$HESTIA/data/users/$user/dns.conf \
							 | 
						||
| 
								 | 
							
										$HESTIA/data/users/$user/dns/*.conf \
							 | 
						||
| 
								 | 
							
										$HESTIA/data/users/$user/mail.conf \
							 | 
						||
| 
								 | 
							
										$HESTIA/data/users/$user/mail/*.conf \
							 | 
						||
| 
								 | 
							
										$HESTIA/data/users/$user/db.conf \
							 | 
						||
| 
								 | 
							
										$HESTIA/data/users/$user/cron.conf 2> /dev/null)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									for row in $search; do
							 | 
						||
| 
								 | 
							
										# Initialise variable
							 | 
						||
| 
								 | 
							
										key=''
							 | 
						||
| 
								 | 
							
										result=''
							 | 
						||
| 
								 | 
							
										dom_alias=''
							 | 
						||
| 
								 | 
							
										suspended=''
							 | 
						||
| 
								 | 
							
										object_link=''
							 | 
						||
| 
								 | 
							
										object_parent=''
							 | 
						||
| 
								 | 
							
										object_time=''
							 | 
						||
| 
								 | 
							
										object_date=''
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										# Parsing result
							 | 
						||
| 
								 | 
							
										type=$(echo $row | cut -f 1 -d : | cut -f 8 -d /)
							 | 
						||
| 
								 | 
							
										data=$(echo $row | cut -f 2,3,4,5 -d :)
							 | 
						||
| 
								 | 
							
										eval "$data"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										# Check WEB domain
							 | 
						||
| 
								 | 
							
										if [ "$type" = 'web.conf' ]; then
							 | 
						||
| 
								 | 
							
											if [ -n "$(echo $DOMAIN | grep $object)" ]; then
							 | 
						||
| 
								 | 
							
												# Check domain alias
							 | 
						||
| 
								 | 
							
												check_alias="$(echo $ALIAS | tr ',' '\n' | grep $object)"
							 | 
						||
| 
								 | 
							
												if [ -n "$check_alias" ]; then
							 | 
						||
| 
								 | 
							
													dom_alias=$(echo $check_alias | tr ' ' ',')
							 | 
						||
| 
								 | 
							
												fi
							 | 
						||
| 
								 | 
							
												key="DOMAIN"
							 | 
						||
| 
								 | 
							
												result="$DOMAIN"
							 | 
						||
| 
								 | 
							
												suspended=$SUSPENDED
							 | 
						||
| 
								 | 
							
												object_time=$TIME
							 | 
						||
| 
								 | 
							
												object_date=$DATE
							 | 
						||
| 
								 | 
							
												((i++))
							 | 
						||
| 
								 | 
							
											else
							 | 
						||
| 
								 | 
							
												check_alias="$(echo $ALIAS | tr ',' '\n' | grep $object)"
							 | 
						||
| 
								 | 
							
												if [ -n "$check_alias" ]; then
							 | 
						||
| 
								 | 
							
													key="DOMAIN"
							 | 
						||
| 
								 | 
							
													result="$DOMAIN"
							 | 
						||
| 
								 | 
							
													object_parent="$DOMAIN"
							 | 
						||
| 
								 | 
							
													dom_alias=$(echo $check_alias | tr ' ' ',')
							 | 
						||
| 
								 | 
							
													suspended=$SUSPENDED
							 | 
						||
| 
								 | 
							
													object_time=$TIME
							 | 
						||
| 
								 | 
							
													object_date=$DATE
							 | 
						||
| 
								 | 
							
													((i++))
							 | 
						||
| 
								 | 
							
												fi
							 | 
						||
| 
								 | 
							
											fi
							 | 
						||
| 
								 | 
							
										fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										# DNS
							 | 
						||
| 
								 | 
							
										if [ "$type" = 'dns.conf' ]; then
							 | 
						||
| 
								 | 
							
											if [ -n "$(echo $DOMAIN | grep $object)" ]; then
							 | 
						||
| 
								 | 
							
												key="DOMAIN"
							 | 
						||
| 
								 | 
							
												result="$DOMAIN"
							 | 
						||
| 
								 | 
							
												suspended=$SUSPENDED
							 | 
						||
| 
								 | 
							
												object_time=$TIME
							 | 
						||
| 
								 | 
							
												object_date=$DATE
							 | 
						||
| 
								 | 
							
												((i++))
							 | 
						||
| 
								 | 
							
											fi
							 | 
						||
| 
								 | 
							
										fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										# DNS Records
							 | 
						||
| 
								 | 
							
										if [ "$type" = 'dns' ]; then
							 | 
						||
| 
								 | 
							
											if [ -n "$(echo $RECORD | grep $object)" ]; then
							 | 
						||
| 
								 | 
							
												key="RECORD"
							 | 
						||
| 
								 | 
							
												result="$RECORD.$DOMAIN"
							 | 
						||
| 
								 | 
							
												suspended=$SUSPENDED
							 | 
						||
| 
								 | 
							
												object_link=$ID
							 | 
						||
| 
								 | 
							
												object_parent=$DOMAIN
							 | 
						||
| 
								 | 
							
												object_time=$TIME
							 | 
						||
| 
								 | 
							
												object_date=$DATE
							 | 
						||
| 
								 | 
							
												((i++))
							 | 
						||
| 
								 | 
							
											fi
							 | 
						||
| 
								 | 
							
										fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										# MAIL
							 | 
						||
| 
								 | 
							
										if [ "$type" = 'mail.conf' ]; then
							 | 
						||
| 
								 | 
							
											if [ -n "$(echo $DOMAIN | grep $object)" ]; then
							 | 
						||
| 
								 | 
							
												key="DOMAIN"
							 | 
						||
| 
								 | 
							
												result="$DOMAIN"
							 | 
						||
| 
								 | 
							
												suspended=$SUSPENDED
							 | 
						||
| 
								 | 
							
												object_time=$TIME
							 | 
						||
| 
								 | 
							
												object_date=$DATE
							 | 
						||
| 
								 | 
							
												((i++))
							 | 
						||
| 
								 | 
							
											fi
							 | 
						||
| 
								 | 
							
										fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										# Mail Accounts
							 | 
						||
| 
								 | 
							
										if [ "$type" = 'mail' ]; then
							 | 
						||
| 
								 | 
							
											type='mail'
							 | 
						||
| 
								 | 
							
											if [ -n "$(echo $ACCOUNT | grep $object)" ]; then
							 | 
						||
| 
								 | 
							
												key="ACCOUNT"
							 | 
						||
| 
								 | 
							
												dom="$(echo $row | cut -f 1 -d : | cut -f 9 -d / | sed 's/.conf//')"
							 | 
						||
| 
								 | 
							
												result="$ACCOUNT@$dom"
							 | 
						||
| 
								 | 
							
												suspended=$SUSPENDED
							 | 
						||
| 
								 | 
							
												object_link=$ACCOUNT
							 | 
						||
| 
								 | 
							
												object_parent=$dom
							 | 
						||
| 
								 | 
							
												object_time=$TIME
							 | 
						||
| 
								 | 
							
												object_date=$DATE
							 | 
						||
| 
								 | 
							
												((i++))
							 | 
						||
| 
								 | 
							
											fi
							 | 
						||
| 
								 | 
							
										fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										# DB
							 | 
						||
| 
								 | 
							
										if [ "$type" = 'db.conf' ]; then
							 | 
						||
| 
								 | 
							
											if [ -n "$(echo $DB | grep $object)" ]; then
							 | 
						||
| 
								 | 
							
												key="DATABASE"
							 | 
						||
| 
								 | 
							
												result="$DB"
							 | 
						||
| 
								 | 
							
												suspended=$SUSPENDED
							 | 
						||
| 
								 | 
							
												object_time=$TIME
							 | 
						||
| 
								 | 
							
												object_date=$DATE
							 | 
						||
| 
								 | 
							
												((i++))
							 | 
						||
| 
								 | 
							
											fi
							 | 
						||
| 
								 | 
							
										fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										# Cron Jobs
							 | 
						||
| 
								 | 
							
										if [ "$type" = 'cron.conf' ]; then
							 | 
						||
| 
								 | 
							
											if [ -n "$(echo $CMD | grep $object)" ]; then
							 | 
						||
| 
								 | 
							
												key="JOB"
							 | 
						||
| 
								 | 
							
												result="$CMD"
							 | 
						||
| 
								 | 
							
												suspended=$SUSPENDED
							 | 
						||
| 
								 | 
							
												object_link=$JOB
							 | 
						||
| 
								 | 
							
												object_parent=$JOB
							 | 
						||
| 
								 | 
							
												object_time=$TIME
							 | 
						||
| 
								 | 
							
												object_date=$DATE
							 | 
						||
| 
								 | 
							
												((i++))
							 | 
						||
| 
								 | 
							
											fi
							 | 
						||
| 
								 | 
							
										fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if [ -n "$result" ]; then
							 | 
						||
| 
								 | 
							
											type=$(echo $type | cut -f1 -d \.)
							 | 
						||
| 
								 | 
							
											str="ID='$i' USER='$user' TYPE='$type' KEY='$key'"
							 | 
						||
| 
								 | 
							
											str="$str RESULT='$result' ALIAS='$dom_alias'"
							 | 
						||
| 
								 | 
							
											str="$str LINK='$object_link' PARENT='$object_parent'"
							 | 
						||
| 
								 | 
							
											str="$str SUSPENDED='$suspended' TIME='$object_time'"
							 | 
						||
| 
								 | 
							
											str="$str DATE='$object_date'"
							 | 
						||
| 
								 | 
							
											echo $str >> $conf
							 | 
						||
| 
								 | 
							
										fi
							 | 
						||
| 
								 | 
							
									done
							 | 
						||
| 
								 | 
							
								done
							 | 
						||
| 
								 | 
							
								IFS=$OLD_IFS
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Defining fileds to select
							 | 
						||
| 
								 | 
							
								fields='$ID $USER $TYPE $KEY $RESULT $ALIAS $LINK $PARENT $SUSPENDED $TIME'
							 | 
						||
| 
								 | 
							
								fields="$fields \$DATE"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Listing domains
							 | 
						||
| 
								 | 
							
								case $format in
							 | 
						||
| 
								 | 
							
									json) json_list_search ;;
							 | 
						||
| 
								 | 
							
									plain)
							 | 
						||
| 
								 | 
							
										nohead=1
							 | 
						||
| 
								 | 
							
										shell_list_search
							 | 
						||
| 
								 | 
							
										;;
							 | 
						||
| 
								 | 
							
									shell)
							 | 
						||
| 
								 | 
							
										fields='$USER~$TYPE~$KEY~$RESULT~$ALIAS'
							 | 
						||
| 
								 | 
							
										shell_list_search | column -t -s '~'
							 | 
						||
| 
								 | 
							
										;;
							 | 
						||
| 
								 | 
							
									*) check_args '1' '0' 'OBJECT [FORMAT]' ;;
							 | 
						||
| 
								 | 
							
								esac
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rm $conf
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								#                       Hestia                             #
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exit
							 |