#! /bin/bash
# 
# SCRIPT/PROGRAMMA:	(AKIRA) Add Key-ID from Repository to Apt-key cache
# LICENZA:		GPL-(2.0)
#-------------------------------------------------------------------------------
# FILE:			akira.sh
# FILE AGGIUNTIVI:	Script caratterizzato da un listato unico.
# SCOPO: 		Scaricare le chiavi pubbliche dei repository per
#			 eliminare taluni errori in output allorquando
#			 si aggiorna la lista dei pacchetti sia con apt
#			 che con aptitude.
#-------------------------------------------------------------------------------
# NOTA:			E' necessario installare il pacchetto apt-key
#-------------------------------------------------------------------------------
# AUTORE:		luca suriano
# MAIL:			luka__at__linux__dot__it
# RILASCIO:		mer nov  1 17:16:52 CET 2006
# VERSIONE:		0.99-Terminale
################################################################################
shopt -s -o nounset
reset

declare -rx SCRIPT=${0##*/}
declare -frx Line
declare -frx Opt_Error
declare -frx Usage
declare -frx Serverreset
declare -frx Define_Server
declare -rix EXIT_SUCCESS=0
declare -rix EXIT_FAILURE=1
declare -x NEW_GPG_ID=
declare -x SEL_SERVER=
declare -rx OPTSTRING="n:hls"
declare -arx KEY_SERVER=("pgp.mit.edu"\
                         "subkeys.pgp.net"\
                         "gpg-keyserver.de")

function Server_List() {
   Line
   echo -e "GPG KEY SERVER LIST\n"

   for ((i=0; i<${#KEY_SERVER[*]}; i++))
   do
      	 echo "[$i] - ${KEY_SERVER[$i]}"
   done
   Line
}

function Define_Server() {
   clear
   Server_List
   read -p "Quale server? :  " SEL_SERVER
   case "$SEL_SERVER" in
   	0 ) SEL_SERVER=${KEY_SERVER[0]} ;;
   	1 ) SEL_SERVER=${KEY_SERVER[1]} ;;
   	2 ) SEL_SERVER=${KEY_SERVER[2]} ;;
	* ) Define_Server ;;
   esac
}

function Line() {
   for ((i=0; i<80; i++))
   do
         echo -e "\e[30;31m\c "
      	 echo -n "-"
	 echo -e "\e[0m\c "
   done
   echo
}

function Opt_Error() {
   Line
   echo "ATTENZIONE: $SCRIPT -h per ottenere un aiuto sui parametri da utilizzare"
   Line
   exit $EXIT_FAILURE;
}

function Usage() {
Line
cat <<HELP
USO:  ./$SCRIPT [-nslh] [arg]

   -n "Key ID"	 # L'ID della chiave da importare
   -s 		 # Un menu' a run-time per selezionare il server da adoperare.
   -l 		 # La lista dei server utilizzabili
   -h		 # Help

L'unico parametro dello script che necessita di un argomento e' -n,
ossia l'ID della nuova chiave pubblica da importare, che solitamente 
e' una stringa alfanumerica tutta in maiuscolo.
Il parametro -s mostrera' in output un menu' per mezzo del quale
e' possibile selezionare il key server, per definire il key-server e'
sufficiente inserire il numero corrispondente; qualora non si adoperi tale
parametro il server di default sara' pgp.mit.edu. 
Per la chiave pubblica proveniente dal repository di Opera Web Browser
e' necessario utilizzare il server 1.

ESEMPI:
$ ./${SCRIPT} -n B3CCE8EF
$ ./${SCRIPT} -n B3CCE8EF -s
HELP
Line
exit $EXIT_FAILURE;
}

if [ $(whoami) != root ]
then
	echo "Sarebbe opportuno eseguire $SCRIPT con privilegi da superuser"
	exit $EXIT_FAILURE
fi

while getopts "$OPTSTRING" options
do
   case $options in
        n ) NEW_GPG_ID=$OPTARG ;;
	s ) Define_Server ;;
	l ) Server_List ;;
        h ) Usage ;;
     *|/? ) Opt_Error ;;
   esac
done

if [ $# -eq 0 ]
then
    Opt_Error
fi


GET_GPG_KEY=$(gpg --keyserver ${SEL_SERVER:-${KEY_SERVER[0]}}\
                  --recv-key $NEW_GPG_ID)
FINGERPRINT=$(gpg --fingerprint $NEW_GPG_ID)
ADD_KEY=$(gpg --armor --export  $NEW_GPG_ID | apt-key add -)

exit $EXIT_SUCCESS
