#!/bin/bash

## Depende de:
##	opensc (cenatic https://forja.cenatic.es/frs/?group_id=160)
##	libnss3-tools (debian)
##	pinentry-gtk2 (debian)

[ -x /usr/bin/zenity ] && interface_bin='/usr/bin/zenity' && IMAGE=""
[ -x /usr/bin/yad ] && interface_bin='/usr/bin/yad' && IMAGE="--image ./dni-e.jpg"

[ -x /usr/bin/firefox ] && NAVIGATOR="firefox" && IN_CONFIG="firefox" && WebBrowser="<b>Firefox</b>"
[ -x /usr/bin/iceweasel ] && NAVIGATOR="iceweasel" && IN_CONFIG="firefox" && WebBrowser="<b>Iceweasel</b>"
[ -x /usr/bin/seamonkey ] && NAVIGATOR="seamonkey" && IN_CONFIG="seamonkey" && WebBrowser="<b>Seamonkey</b>"
[ -x /usr/bin/iceape ] && NAVIGATOR="iceape" && IN_CONFIG="seamonkey" && WebBrowser="<b>Iceape</b>"

case $LANG in
	es* )
		ZNT_CLASS="DNI-electrónico"
		ZNT_TITTLE="Instalación del DNIe"
		ZNT_ERROR_NAVIGATOR="<b> Hay una instancia del navegador $WebBrowser en ejecución. </b> \n\n Antes de ejecutar este programa asegúrese de cerrar \n todas las instancias del navegador $WebBrowser"
		ZNT_ERROR_PROFILE="\n Es necesario ejecutar al menos una vez $WebBrowser.\n\n  A continuación se abrira el navegador $WebBrowser. Una vez abierto, asegúrese \n de cerrarlo antes de volver a ejecutar este programa."
		ZNT_QUESTION_ACCEPT_TEXT=" A continuación se procederá a instalar un módulo sobre el navegador $WebBrowser \n lo que le permitirá el uso del <b>DNIe</b> en páginas web.\n\n Si está ejecutando $WebBrowser, ciérrelo antes de pulsar «Instalar» "
		ZNT_QUESTION_ACCEPT_OK="Instalar"
		ZNT_QUESTION_ACCEPT_CANCEL="Salir"
		ZNT_PROGRESS="Espere..."
		ZNT_QUESTION_TEST_TEXT=" La instalación ha terminado.\n\n Pulse sobre «Prueba» y se abrirá $WebBrowser en la página de <i><b>www.dnielectronico.es</b></i>"
		ZNT_QUESTION_TEST_OK="Prueba"
		ZNT_QUESTION_TEST_CANCEL="Salir"
	;;

	gl* )
		
		ZNT_CLASS="DNI-electrónico"
		ZNT_TITTLE="Instalación do DNIe"
		ZNT_ERROR_NAVIGATOR="<b> Hai unha instancia do navegador $WebBrowser en execución. </b> \n\n Antes de executar este programa asegúrese de pechar \n todas as instancias do navegador $WebBrowser"
		ZNT_ERROR_PROFILE=" É necesario que execute polo menos unha vez $WebBrowser.\n\n A seguir abrirase o navegador$WebBrowser. Unha vez aberto, asegúrese \n de pechalo antes de volver a executar este programa."
		ZNT_QUESTION_ACCEPT_TEXT=" A seguir procederase a instalar un módulo sobre o navegador $WebBrowser \n o que permitiralle o uso do <b>DNIe</b> en páxinas web. \n\n Se está a executar o $WebBrowser, pécheo antes de premer en «Instalar» "
		ZNT_QUESTION_ACCEPT_OK="Instalar"
		ZNT_QUESTION_ACCEPT_CANCEL="Saír"
		ZNT_PROGRESS="Agarde..."
		ZNT_QUESTION_TEST_TEXT=" Rematou a instalación.\n\n Prema sobre «Proba» e o $WebBrowser abrirase na páxina de <i><b>www.dnielectronico.es</b></i>"
		ZNT_QUESTION_TEST_OK="Proba"
		ZNT_QUESTION_TEST_CANCEL="Saír"
	;;
esac

fallo () {

        case $1 in

                $NAVIGATOR )
                        ##
                        $interface_bin $IMAGE --class="$ZNT_CLASS" --title="$ZNT_TITTLE" --text="$ZNT_ERROR_NAVIGATOR"
                        exit 11
                ;;

                profile )
                        ##
                        $interface_bin $IMAGE --class="$ZNT_CLASS" --title="$ZNT_TITTLE" --text="$ZNT_ERROR_PROFILE"

                        ## Se abre el navegador
                        /usr/bin/$NAVIGATOR
                        exit 10
                ;;
        esac
}

test_navigator () {

        navigator_run=$(/usr/bin/pgrep -f '(firefox|iceweasel|iceape|seamonkey)')

        case ${navigator_run:+ejecutandose} in
                ejecutandose )
                        ## se esta ejecutando
                        fallo $NAVIGATOR
                ;;

                * )
                        ## Compruebo que existe profile
                        [ ! -e ~/.mozilla/$IN_CONFIG/profiles.ini ] && fallo profile
                ;;
        esac
}

instalar_modulo () {

        ## Confirmar instalar
        mod_still_includes=$(/usr/bin/modutil -dbdir ~/.mozilla/$IN_CONFIG/"$1" -rawlist | grep "DNIe")

        case ${mod_still_includes:-void} in
                void )
                        /usr/bin/modutil -dbdir ~/.mozilla/$IN_CONFIG/"$1" -add "DNIe" -libfile "/usr/lib/opensc-pkcs11.so" -force
                ;;
        esac
}

instalar_certificado () {

        certutil -d ~/.mozilla/$IN_CONFIG/"$1" -A -n "Police by tegnix.com" -t "CT,C,C" -i /usr/share/openscdnie/ac_raiz_dnie.crt
        certutil -d ~/.mozilla/$IN_CONFIG/"$1" -A -n "FNMT by tegnix.com" -t "CT,C,C" -i /usr/share/openscdnie/fnmt.crt
}

$interface_bin $IMAGE --class="$ZNT_CLASS" --title="$ZNT_TITTLE" --text="$ZNT_QUESTION_ACCEPT_TEXT" --button="$ZNT_QUESTION_ACCEPT_OK":0 --button="$ZNT_QUESTION_ACCEPT_CANCEL":1 || exit 0

test_navigator

cat ~/.mozilla/$IN_CONFIG/profiles.ini | grep Path | awk -F"=" '{print $2}' | while read profile_dir
do
        instalar_modulo "$profile_dir"
        echo 45
        instalar_certificado "$profile_dir"
        echo 90
done | $interface_bin $IMAGE --class="$ZNT_CLASS" --title="$ZNT_TITTLE" --progress --text="$ZNT_PROGRESS" --pulsate --auto-close

$interface_bin $IMAGE --class="$ZNT_CLASS" --title="$ZNT_TITTLE" --text="$ZNT_QUESTION_TEST_TEXT" --button="$ZNT_QUESTION_TEST_OK":0 --button="$ZNT_QUESTION_TEST_CANCEL":1 || exit 0

/usr/bin/$NAVIGATOR -P default http://www.dnielectronico.es/como_utilizar_el_dnie/verificar.html
