#!/bin/bash # Fichier CSV contenant les données des comptes CSV_FILE="$HOME/Sync/Docs/totp_accounts.csv" # Si fichier précisé, l'utiliser if [ ! -z $1 ]; then CSV_FILE="$1"; fi # 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 45 exit #done