#!/usr/bin/env bash

set -e

tmp=$(mktemp -t freemailXXX)
cat ./data/blacklist.txt \
    | sed '/./,$!d' \
    | sed -e 's/^ *//' -e 's/ *$//' \
    | awk '{print tolower($0)}' \
    | sort \
    | uniq > $tmp
mv $tmp ./data/blacklist.txt

tmp=$(mktemp -t freemailXXX)
cat ./data/free.txt \
    | sed '/./,$!d' \
    | sed -e 's/^ *//' -e 's/ *$//' \
    | awk '{print tolower($0)}' \
    | sort \
    | uniq \
    | comm -23 - ./data/blacklist.txt > $tmp
mv $tmp ./data/free.txt

tmp=$(mktemp -t freemailXXX)
cat ./data/disposable.txt \
    | sed '/./,$!d' \
    | sed -e 's/^ *//' -e 's/ *$//' \
    | awk '{print tolower($0)}' \
    | sort \
    | uniq \
    | comm -23 - ./data/blacklist.txt \
    | comm -23 - ./data/free.txt > $tmp
mv $tmp ./data/disposable.txt

sources=$(cat ./data/sources.txt)
new=$(mktemp -t freemailXXX)
for source in $sources; do
    echo "$(curl --silent $source)" >> $new
done;

tmp=$(mktemp -t freemailXXX)
cat $new \
    | sed '/./,$!d' \
    | sed -e 's/^ *//' -e 's/ *$//' \
    | awk '{print tolower($0)}' \
    | sort \
    | uniq \
    | comm -23 - ./data/blacklist.txt \
    | comm -23 - ./data/free.txt \
    | comm -23 - ./data/disposable.txt > $tmp

confirmed=$(mktemp -t freemailXXX)
for domain in $(cat $tmp); do
    result=`dig +short mx $domain`
    if [ -n "$result" ]; then
        echo $domain >> $confirmed
    fi
done

tmp=$(mktemp -t freemailXXX)
cat $confirmed ./data/free.txt \
    | sort \
    | uniq > $tmp
mv $tmp ./data/free.txt

echo 'Complete!'
