scripts/totptui/totptui.sh

88 lines
2.2 KiB
Bash
Raw Normal View History

2024-07-09 13:23:02 +00:00
#!/bin/bash
# Fichier CSV contenant les données des comptes
CSV_FILE="accounts.csv"
# Vérifie si le fichier CSV existe
if [[ ! -f "$CSV_FILE" ]]; then
echo "Le fichier $CSV_FILE n'existe pas."
exit 1
fi
# Personnalisation des couleurs de whiptail
export NEWT_COLORS='
root=,black
window=white,black
border=white,black
title=red,black
compactbutton=white,black
button=red,black
textbox=white,black
listbox=white,black
actlistbox=red,black
sellistbox=red,black
actsellistbox=red,black
'
# Démarrage d'une boucle pour toujours revenir au menu de sélection
while :; do
# Lecture des noms de comptes à partir du fichier CSV, en ignorant la première ligne (en-tête)
ACCOUNT_NAMES=$(tail -n +2 "$CSV_FILE" | cut -d',' -f1)
# Préparation de la liste pour whiptail
MENU_ITEMS=()
INDEX=1
while IFS= read -r account; do
MENU_ITEMS+=("$INDEX" "$account")
INDEX=$((INDEX + 1))
done <<< "$ACCOUNT_NAMES"
# Affichage de la liste des comptes avec whiptail
ACCOUNT_INDEX=$(whiptail --title "TOTP TUI" --menu "Compte :" 25 50 15 "${MENU_ITEMS[@]}" 3>&1 1>&2 2>&3)
# Si l'utilisateur annule, arrêter le script
if [[ $? -ne 0 ]]; then
exit 1
fi
# Récupérer les informations du compte sélectionné, en ignorant la première ligne (en-tête)
LINE=$(tail -n +2 "$CSV_FILE" | sed -n "${ACCOUNT_INDEX}p")
IFS=',' read -r account_name key totp_mode base32 <<< "$LINE"
# Définition des arguments pour oathtool en fonction de base32 et totp_mode
OATHTOOL_ARGS=""
if [[ "$base32" == "1" ]]; then
OATHTOOL_ARGS+="-b "
fi
case "$totp_mode" in
"SHA1")
OATHTOOL_ARGS+="--totp "
;;
"SHA256")
OATHTOOL_ARGS+="--totp=SHA256 "
;;
"SHA512")
OATHTOOL_ARGS+="--totp=SHA512 "
;;
*)
echo "Mode TOTP non valide : $totp_mode"
exit 1
;;
esac
# Génération du code TOTP avec oathtool
TOTP_CODE=$(oathtool $OATHTOOL_ARGS "$key")
# Affichage du code TOTP
#whiptail --title "TOTP-TUI" --msgbox "Le code TOTP pour le compte \"$account_name\" est : $TOTP_CODE" 8 45
#clear; echo -e "\e[31m$(figlet $TOTP_CODE)\e[0m"
figlet_output=$(figlet -f slant "$TOTP_CODE")
echo $TOTP_CODE | xclip &
whiptail --title "TOTP-TUI" --msgbox "TOTP \"$account_name\" :\n\n$figlet_output" 14 40
done