#!/bin/bash

readonly PROG_NAME="Apertura di file p7m"

if [ "$(which zenity)" == "" ]; then
	echo "Errore: zenity non presente. Installare zenity."
	exit 10
fi

IN_FILE=""
if [ "$1" == "" ]; then
	IN_FILE=$(zenity --file-selection \
		--title="Seleziona un file p7m" --file-filter="file firmati | *.p7m *.P7m *P7M" 2> /dev/null)
else
	IN_FILE="$1"
fi

if [ "$IN_FILE" == "" ]; then
	echo "nessun file selezionato"
	exit 1  # nessun file selezionato
fi

if [ ! -f "$IN_FILE" ]; then
	echo "file inesistente"
	exit 2  # file inesistente
fi

# nome dei file di output
outfile=${IN_FILE::-4} # l'estensione deve essere ".p7m", 4 caratteri
outfilecert="$IN_FILE.cert"

# estrazione
openssl smime -verify -inform DER -in "$IN_FILE" -noverify -out "$outfile"
openssl pkcs7 -inform DER -print_certs -text -in "$IN_FILE" -out "$outfilecert"

# esito
outfile_senzaext=${outfile%.*}
if [ "$outfile_senzaext" == "$outfile" ]; then
	messaggio="Estrazione terminata: sono stati creati i due file\n\"$outfile\"\n\"$outfilecert\""
	messaggio="$messaggio\n\nATTENZIONE!\nRinominare in modo appropriato il file di output;provare ad esempio\n\"$outfile.pdf\""
	zenity --info --text "$messaggio" --title "$PROG_NAME" 2> /dev/null
else
	echo "creati i file"
	echo " - \"$outfile\""
	echo " - \"$outfilecert\""
	xdg-open "$outfile"
	xdg-open "$outfilecert"
fi
