#! /bin/bash

#Define our color set
red='\033[0;31m'
green='\033[0;32m'
grey='\033[0;37m'
noColor='\033[0m'

#Define counter variables.
ResolvesHereCounter=0
NotHereCounter=0
TBDCounter=0

#Get a list of the server's IPs
#serverIPList=$(ifconfig | grep "inet " | awk '{print $2}' | cut -d: -f2) #this method seems to be slightly less optimal since it contains 127.0.0.1
serverIPList=$(hostname -I | tr '[:space:]' '\n' | tr -s [:space:])


#------------------------------------------------------------------------
#For Loop that goes through the domains and digs them, then compares the IPs to server IPs. Throws results into proper array.
#------------------------------------------------------------------------
for dom in $(cat /etc/userdatadomains | cut -d: -f1); do 
    	domIP=$(dig @8.8.8.8 $dom +short);
    	if [[ $domIP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]] && [[ $(echo $domIP | wc -l) -eq 1 ]]; then 
        	serverIPcounterCrossCheck=0;
        	for serverIP in $serverIPList; do 
			if [[ $serverIP == $domIP ]]; then 
				ResolvesHere[$ResolvesHereCounter]=$dom;
                		RHIP[$ResolvesHereCounter]=$domIP;
				ResolvesHereCounter=$((ResolvesHereCounter + 1));
                		serverIPcounterCrossCheck=$((serverIPcounterCrossCheck + 1));
            		fi;
        	done;
        	
		#If the domain has an IP, but does not dig to a server IP
		if [[ $serverIPcounterCrossCheck -eq 0 ]] && [[ $(echo $domIP | wc -l) -eq 1 ]]; then 
			NotHere[$NotHereCounter]=$dom;
			NHIP[$NotHereCounter]=$domIP;
			NotHereCounter=$((NotHereCounter + 1));
        	fi;

	#if the domain does not even have an IP address to begin with
	#TO DO: Remove fake subdomains from this list
	elif [[ ! $domIP =~ ^[0-9] ]]; then 
		NotHere[$NotHereCounter]=$dom;
		NHIP[$NotHereCounter]=$domIP;
        	NotHereCounter=$((NotHereCounter + 1));

	#Anything else cannot be determined
    	else
		#domIP=$(echo $domIP | tr '\n' '\t' | tr -s [:space:]);
                domIP=$(echo $domIP | tr "\n" "\t");
		TBD[$TBDCounter]=$dom;
		TBDIP[$TBDCounter]=$domIP;
                TBDCounter=$((TBDCounter + 1));
	fi;
done

#------------------------------------------------------------------------
#Print out the results of each Array
#------------------------------------------------------------------------
echo -e "${green}\e[4m=== ($ResolvesHereCounter) Sites that resolve to the server ===\e[0m${noColor}"
for (( i = 0; i < ResolvesHereCounter; i++ )); do
	printf "%-40s %s \n" "${ResolvesHere[$i]}" "${RHIP[$i]}"; 
done
printf "\n"

echo -e "${red}\e[4m=== ($NotHereCounter) Sites that do NOT resolve to the server ===\e[0m${noColor}"
for (( i = 0; i < NotHereCounter; i++ )); do
	printf "%-40s %s \n" "${NotHere[$i]}" "${NHIP[$i]}";
done
printf "\n"

echo -e "${grey}\e[4m=== ($TBDCounter) Sites that have multiple IPs (i.e. cannot be determined) ===\e[0m${noColor}" 
for (( i = 0; i < TBDCounter; i++ )); do
        printf "%-40s %s %s \n" "${TBD[$i]}" "$(echo ${TBDIP[$i]} | column -t)";
done
printf "\n\n"

#CloudFlare IPv4 range https://www.cloudflare.com/ips-v4 
