diff --git a/totptui/accounts.csv b/totptui/accounts.csv new file mode 100644 index 0000000..e533642 --- /dev/null +++ b/totptui/accounts.csv @@ -0,0 +1,3 @@ +account_name,key,totp_mode,base32 +Exemple Num1,6ND25BYLF62TSWUW,SHA1,1 +Exemple Num2,3LKAOG66QOMV34CQR6ZCYNZFI6F2VPIT,SHA1,1 diff --git a/totptui/totptui.sh b/totptui/totptui.sh new file mode 100755 index 0000000..7f54b4c --- /dev/null +++ b/totptui/totptui.sh @@ -0,0 +1,87 @@ +#!/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