#!/bin/sh

# dnstwist should at least find the genuine domains run by the Debian project:
# - debian.org
# - debian.eu
# - debian.net
# - debian.com
#
# All those domains should have identical settings for the following records:
# - dns_a
# - dns_aaaa
# - dns_mx
# - dns_ns
#
# Return values have the following meaning:
# 0: success
# 1: error during dnstwist execution
# 2: error during json syntax validation
# 3: unexpected number of genuine Debian domains
# 4: different DNS records for genuine Debian domains

# Run dnstwist for debian.org domain
ALL_DOMAINS=`dnstwist --format json --ssdeep --registered --mxcheck --geoip --whois --phash --screenshots $AUTOPKGTEST_TMP --tld /usr/share/dnstwist/dictionaries/common_tlds.dict debian.org`
if [ $? -ne 0 ]; then
	echo "dnstwist execution failed" > /dev/stderr
	exit 1
fi

# Validate json syntax
# Redirect stderr to /dev/null since jsonlint also prints success message to stderr
echo $ALL_DOMAINS | jsonlint 2> /dev/null
if [ $? -ne 0 ]; then
	echo "Error during json syntax validation of the following output:" > /dev/stderr
	echo $ALL_DOMAINS > /dev/stderr
	exit 2
fi

# Get information for genuine domains
GENUINE_DOMAINS=`echo $ALL_DOMAINS | jq '.[] | select(."domain" == "debian.org" or ."domain" == "debian.eu" or ."domain" == "debian.net" or ."domain" == "debian.com")'`

# Finally some counting
NUM_GENUINE_DOMAINS=`echo $GENUINE_DOMAINS | jq '."domain"' | wc -l`

NUM_GENUINE_DNS_A=`echo $GENUINE_DOMAINS | jq '."dns_a" | .[0] | select(.)' | wc -l`
NUM_GENUINE_DNS_AAAA=`echo $GENUINE_DOMAINS | jq '."dns_aaaa" | .[0] | select(.)' | wc -l`
NUM_GENUINE_DNS_MX=`echo $GENUINE_DOMAINS | jq '."dns_mx" | .[0] | select(.)' | wc -l`
NUM_GENUINE_DNS_NS=`echo $GENUINE_DOMAINS | jq '."dns_ns" | .[0] | select(.)' | wc -l`

NUM_DIFFERENT_GENUINE_DNS_A=`echo $GENUINE_DOMAINS | jq '."dns_a" | .[0] | select(.)' | sort | uniq | wc -l`
NUM_DIFFERENT_GENUINE_DNS_AAAA=`echo $GENUINE_DOMAINS | jq '."dns_aaaa" | .[0] | select(.)' | sort | uniq | wc -l`
NUM_DIFFERENT_GENUINE_DNS_MX=`echo $GENUINE_DOMAINS | jq '."dns_mx" | .[0] | select(.)' | sort | uniq | wc -l`
NUM_DIFFERENT_GENUINE_DNS_NS=`echo $GENUINE_DOMAINS | jq '."dns_ns" | .[0] | select(.)' | sort | uniq | wc -l`

echo "Information for all domains:"
echo $ALL_DOMAINS
echo
echo "================================================================================"
echo
echo "Information for genuine domains:"
echo $GENUINE_DOMAINS
echo
echo "================================================================================"
echo
echo "Number of genuine Debian domains: $NUM_GENUINE_DOMAINS"
echo
echo "Number of dns_a records for genuine domains: $NUM_GENUINE_DNS_A"
echo "Number of dns_aaaa records for genuine domains: $NUM_GENUINE_DNS_AAAA"
echo "Number of dns_mx records for genuine domains: $NUM_GENUINE_DNS_MX"
echo "Number of dns_ns records for genuine domains: $NUM_GENUINE_DNS_NS"
echo
echo "Number of different dns_a records for genuine domains: $NUM_DIFFERENT_GENUINE_DNS_A"
echo "Number of different dns_aaaa records for genuine domains: $NUM_DIFFERENT_GENUINE_DNS_AAAA"
echo "Number of different dns_mx records for genuine domains: $NUM_DIFFERENT_GENUINE_DNS_MX"
echo "Number of different dns_ns records for genuine domains: $NUM_DIFFERENT_GENUINE_DNS_NS"

if [ $NUM_GENUINE_DOMAINS -ne 4 -o \
	$NUM_GENUINE_DNS_A -ne 4 -o $NUM_GENUINE_DNS_AAAA -ne 4 -o \
	$NUM_GENUINE_DNS_MX -ne 4 -o $NUM_GENUINE_DNS_NS -ne 4 ]; then
	echo "Unexpected number of genuine Debian domains or their DNS records" > /dev/stderr
	exit 3
fi

if [ $NUM_DIFFERENT_GENUINE_DNS_A -ne 1 -o \
	$NUM_DIFFERENT_GENUINE_DNS_AAAA -ne 1 -o \
	$NUM_DIFFERENT_GENUINE_DNS_MX -ne 1 -o \
	$NUM_DIFFERENT_GENUINE_DNS_NS -ne 1 ]; then
	echo "Different DNS records for genuine Debian domains" > /dev/stderr
	exit 4
fi

exit 0
