# -----------------------------------------------
# 	     Fabrica de Provedores
# Script de Importacao de Dominios Bloqueados
# Uso: script.sh arquivo.csv
# -----------------------------------------------
#!/bin/bash
DIR="/etc/unbound/domains.d"
CNF="domains-block.conf"
CFG="/etc/unbound/local.d/local-zone.conf"

# 1o. Verificar: Diretorio
# -----------------------------------------------
function existsDir(){
    if [ ! -d "$DIR" ]; then
	
	echo -e "[+] Diretorio, criado";
	/usr/bin/mkdir -p $DIR;
	
	echo -e "[+] Diretorio, atribuindo permissoes";
	/usr/bin/chown --reference /etc/unbound/ $DIR;	
	/usr/bin/chmod --reference /etc/unbound/ $DIR;
    else
	echo -e "[=] Diretorio, existe";
    fi
}

# 2o. Verificar: domins-block.conf
# -----------------------------------------------
function existsCnf(){
    if [ ! -f "$DIR/$CNF" ]; then

        echo -e "[+] Arquivo, criado";
        /usr/bin/touch $DIR/$CNF;

        echo -e "[+] Arquivo, atribuindo permissoes";
        /usr/bin/chown --reference /etc/unbound/ $DIR/$CNF;
        /usr/bin/chmod --reference /etc/unbound/ $DIR/$CNF;
    else
        echo -e "[=] Arquivo, existe";
    fi
}

# 3o. Verificar: Include
# -----------------------------------------------
function existsInc(){
    if grep -q "include: \"$DIR/$CNF\"" $CFG; then
	echo -e "[=] Arquivo de configuracao, ok!";

    else	
	echo -e "[+] Arquivo de configuracao, criado!";
	echo -e "include: \"$DIR/$CNF\"" >> $CFG;
    fi
}

# 4o. Verificar: CSV
# -----------------------------------------------
function existCsv(){
    if [ ! -f "$CSV" ]; then
        echo -e "[-] Erro: Arquivo CSV, nao encontrado!";
        exit 1
    else 
	echo -e "[+] Processando blacklist...!";
	> "$DIR/$CNF";
	while IFS=',' read -r d i
	do
		echo "    local-zone: \"$d\" redirect" 	>> "$DIR/$CNF"
		echo "    local-data: \"$d A $i\"" 	>> "$DIR/$CNF"
	done < "$CSV"
    fi
}

# 5o. Verificar Configuracoes
# -----------------------------------------------
function checkUnb(){
    UNB=$(/usr/sbin/unbound-checkconf /etc/unbound/unbound.conf | grep "no errors" | wc -l);
    if [ $UNB -eq 1 ]; then
	echo -e "[+] Success!";
	/usr/sbin/unbound-control reload
    else
	echo -e "[+] Erro!";
    fi

}

# Executar
# -----------------------------------------------
if [ $# -ne 1 ]; then
	echo -e "[-] Erro: Arquivo CSV, nao informado!";
	echo -e "=== Exemplo de Uso: $0 arquivo.csv";
	exit 1
fi

CSV="$1"
existsDir;
existsCnf;
existsInc;
existCsv $CSV;
checkUnb;
