#!/bin/bash
# Instala el certificado de Autofirma en los almacenes de Mozilla Firefox y Chrome
#
# Con el parámetro -all recorre todos los directorios de usuario y funciona silenciosamente
# Sin parámetros, sólo instala el certificado en el directorio del usuario que lanza este script

certfile="/usr/share/AutoFirmaJA/AutoFirmaJA.crt"
certname="AutoFirmaJA ROOT LOCAL"

if [ "$1" = "-all" ]; then 
 userdir=$(find /home/ -maxdepth 5 -name ".mozilla") 
else
 userdir="$HOME/.mozilla" 
fi

OIFS="$IFS"
IFS=$'\n'

for dir in $userdir
do
  echo "Actualizando el certificado de AutoFirma en el directorio" $dir
  echo " Almacenes en formato dbm"
  for certdb in $(find $dir/firefox -maxdepth 2 -name "cert8.db")
  do	
    certdir=$(dirname ${certdb});
	echo "Almacen:" $certdir "/cert8.db"
    certutil -A -n "${certname}" -t "TCu,Cu,Tu" -i ${certfile} -d dbm:${certdir}
  done
  echo " Almacenes en formato sql"
  for certdb in $(find $dir/firefox -maxdepth 2 -name "cert9.db")
  do
    certdir=$(dirname ${certdb});
	echo "Almacen:" $certdir "/cert9.db"
    certutil -A -n "${certname}" -t "TCu,Cu,Tu" -i ${certfile} -d sql:${certdir}
  done
done

#Para Chrome y Chromium
if [ "$1" = "-all" ]; then 
 userdir=$(find /home/ -maxdepth 2 -name ".pki") 
else
 userdir="$HOME/.pki" 
fi


for dir in $userdir
do		
	if [ -x "$dir/nssdb" ]; then
		echo "Instalando el certificado para Chrome y Chromium en la carpeta de usuario " $dir
		certutil -d sql:$dir/nssdb -A -n "${certname}" -i ${certfile} -t "TCP,TCP,TCP" 
	fi
done

for userhome in $(find /home/ -maxdepth 1 -mindepth 1)
do		

	if [ -x "$userhome/.pki/nssdb" ]; then
		# Chrome Local State
		if [ -f "$userhome/.config/google-chrome/Local State" ]; then				
			found=$(fgrep protocol_handler "$userhome/.config/google-chrome/Local State")			
			if [ -n "$found" ] ;then
				sed 's/\"protocol_handler\":{\"excluded_schemes\":{/\"protocol_handler\":{\"excluded_schemes\":{\"afirma\":false,\"afirmaja\":false,/g' 				$userhome/.config/google-chrome/Local\ State > $userhome/.config/google-chrome/Local\ State1 

				sed -i 's/\"protocol_handler\":{\"excluded_schemes\":{\"afirma\":false,\"afirmaja\":false,}/\"protocol_handler\":{\"excluded_schemes\":{\"afirma\":false,\"afirmaja\":false}/g' $userhome/.config/google-chrome/Local\ State1 

				if ! grep -q "excluded_schemes" $userhome/.config/google-chrome/Local\ State ; then 
					sed -i 's/last_active_profiles\([^,]*\),/last_active_profiles\1,\"protocol_handler\":{\"excluded_schemes\":{\"afirma\":false,\"afirmaja\":false}},/' $userhome/.config/google-chrome/Local\ State1 
				fi 

				\cp $userhome/.config/google-chrome/Local\ State1 $userhome/.config/google-chrome/Local\ State 			
			fi		
		fi

		# Chromium Local State
		if [ -f "$userhome/.config/chromium/Local State" ]; then
				
			found=$(fgrep protocol_handler "$userhome/.config/chromium/Local State")			
			if [ -n "$found" ] ;then
				sed 's/\"protocol_handler\":{\"excluded_schemes\":{/\"protocol_handler\":{\"excluded_schemes\":{\"afirma\":false,\"afirmaja\":false,/g' 				$userhome/.config/chromium/Local\ State > $userhome/.config/chromium/Local\ State1 

				sed -i 's/\"protocol_handler\":{\"excluded_schemes\":{\"afirma\":false,\"afirmaja\":false,}/\"protocol_handler\":{\"excluded_schemes\":{\"afirma\":false,\"afirmaja\":false}/g' $userhome/.config/chromium/Local\ State1 

				if !  grep -q "excluded_schemes" $userhome/.config/chromium/Local\ State ; then 
					sed -i 's/last_active_profiles\([^,]*\),/last_active_profiles\1,\"protocol_handler\":{\"excluded_schemes\":{\"afirma\":false,\"afirmaja\":false}},/' $userhome/.config/chromium/Local\ State1 
				fi 

				\cp $userhome/.config/chromium/Local\ State1 $userhome/.config/chromium/Local\ State 
			fi
		fi


		# Chrome Preferences
		if [ -f "$userhome/.config/google-chrome/Default/Preferences" ]; then
				
			found=$(fgrep protocol_handler "$userhome/.config/google-chrome/Default/Preferences")			
			if [ -n "$found" ] ;then				
				sed 's/\"protocol_handler\":{\"excluded_schemes\":{/\"protocol_handler\":{\"excluded_schemes\":{\"afirma\":false,\"afirmaja\":false,/g' $userhome/.config/google-chrome/Default/Preferences > $userhome/.config/google-chrome/Default/Preferences1 

				sed -i 's/\"protocol_handler\":{\"excluded_schemes\":{\"afirma\":false,\"afirmaja\":false,}/\"protocol_handler\":{\"excluded_schemes\":{\"afirma\":false,\"afirmaja\":false}/g' $userhome/.config/google-chrome/Default/Preferences1 

				\cp $userhome/.config/google-chrome/Default/Preferences1 $userhome/.config/google-chrome/Default/Preferences			
			fi		
		fi

		# Chromium Preferences
		if [ -f "$userhome/.config/chromium/Default/Preferences" ]; then
				
			found=$(fgrep protocol_handler "$userhome/.config/chromium/Default/Preferences")			
			if [ -n "$found" ] ;then				
				sed 's/\"protocol_handler\":{\"excluded_schemes\":{/\"protocol_handler\":{\"excluded_schemes\":{\"afirma\":false,\"afirmaja\":false,/g' 				$userhome/.config/chromium/Default/Preferences > $userhome/.config/chromium/Default/Preferences1 

				sed -i 's/\"protocol_handler\":{\"excluded_schemes\":{\"afirma\":false,\"afirmaja\":false,}/\"protocol_handler\":{\"excluded_schemes\":{\"afirma\":false,\"afirmaja\":false}/g' $userhome/.config/chromium/Default/Preferences1 

				\cp $userhome/.config/chromium/Default/Preferences1 $userhome/.config/chromium/Default/Preferences 			
			fi		
		fi
	fi
done


IFS="$OIFS"

if [ "$1" != "-all" ]; then 
  if [ -x "/usr/bin/zenity" ]; then
    zenity --info --title "AutoFirmaJA" --text "El certificado para usar AutoFirmaJA se ha instalado"
  fi
fi

