bw-cli_autologger/bw_cli_autolog.sh
Elden Ivanouski a17b0ba7c1 Correction ordre de lancement des commandes trap
Correction d'un bug qui n'intervenait que dans une situation précise
mais qui faisait que la fonction de déconnexion ne se lançait pas et
laissait de ce fait les fichiers de configurations générés dans les
répertoires sans les supprimer.

Explications :
Si lors de la connexion avec l'ancienne version (ouverture du premier
terminal parent) vous effectuez un CTRL+C (que vous tuez le programme)
alors les commandes "trap" sensées faire le nettoyage par la fonction
identities_destroy n'étaient pas mises en place.

Si par la suite vous lanciez "identities_create" dans le terminal sans
resourcer ce dernier, la fonction identities_create se serait exécutée
normalement, mais les commandes trap ne seraient toujours pas en place.

Dans cette situation, lors d'une déconnexion, le nettoyage par la
fonction "identities_destroy" n'intervient pas. Bien que les variables
et les clés SSH soient en mémoire vive et de ce fait de facto protégés
et non affectés par ce problème, les fichiers placés dans les différents
répertoires eux ne sont pas nettoyés.

Avec la nouvelle version de l'utilitaire, j'ai supprimée le bloc de
condition exécuté à la fin afin d'intégrer les commandes trap au sein
de la fonction identities_create, à des endroits stratégiques pour que
la mise en place des commandes trap s'effectue peu importe si la
fonction est tuée ou non, et à quel moment.

La différenciation entre terminal parent et enfant est également prise
en compte au sein de la fonction identities_create, faisant du bloc de
condition final de la version précédente une partie inutile du code.
2025-11-13 12:01:22 +01:00

87 lines
2.7 KiB
Bash

#!/bin/sh
identities_create() {
# IDENTITES
Bitwarden_Email="<EMAIL_DE_CONNEXION_A_BITWARDEN>"
Bitwarden_Server="<URL_DE_L_INSTANCE_BITWARDEN>"
Inception_Detect=0
if [ -z "${BW_Session}" ] || [ "${#BW_Session}" -lt 10 ]; then
trap identities_destroy EXIT
Local_Version="2.2.6"
Latest_Version=$(curl -s "https://gitea.cloudyfy.fr/Siphonight/bw-cli_autologger/src/branch/main/bw_cli_autolog.sh" | grep -m1 "Local_Version" | cut -d ';' -f 2 | cut -d '&' -f 1)
if [ "${Local_Version}" != "${Latest_Version}" ]; then
tput setaf 1
echo "Votre version de l'utilitaire n'est pas à jour."
echo "Version locale : ${Local_Version} | Dernière version : ${Latest_Version}"
echo "Récupérez la dernière version sur https://gitea.cloudyfy.fr/Siphonight/bw-cli_autologger ."
else
tput setaf 2
echo "Votre utilitaire est à jour avec la dernière version ! Happy Connect =)"
fi
tput setaf 4
echo "Bitwarden CLI autologger version ${Local_Version}"
echo "Lancement du autologin (ne prenez pas en compte les tokens, ils sont gérés automatiquement)."
tput sgr0
identities_destroy
bw config server "${Bitwarden_Server}"
# shellcheck disable=SC2155
export BW_Session="$(bw login "${Bitwarden_Email}" | tee /dev/tty | grep -m1 '==' | cut -d '"' -f 2)"
Inception_Detect=1
fi
BW_List=$(bw list items --session "${BW_Session}")
if [ "${BW_List}" != "" ]; then
if [ "${Inception_Detect}" != "1" ]; then
trap 'kill $SSH_AGENT_PID' EXIT
unset BW_Session
fi
# shellcheck disable=SC2009
if [ "$(ps -ax | grep 'sh -c while true; do sleep 10; bw sync -f; done' | grep -cv 'grep')" = "0" ]; then
nohup sh -c 'while true; do sleep 10; bw sync -f; done' >/dev/null 2>&1 &
fi
tput setaf 4
echo ""
echo "Bitwarden connecté, mise en place des identités..."
tput sgr0
eval "$(ssh-agent)"
# shellcheck disable=SC3037
printf "%s" "${BW_List}" | jq -r '.[] | select(.name=="identities - configs") | .notes' >"${HOME}"/.identities-loaded.sh
chmod 700 "${HOME}"/.identities-loaded.sh
# shellcheck disable=SC1091
. "${HOME}"/.identities-loaded.sh
unset BW_List
else
tput setaf 4
echo "Bitwarden non connecté, les identités n'ont pas été mises en place."
tput sgr0
fi
}
identities_destroy() {
tput setaf 4
echo "Déconnexion des identités en cours..."
bw logout
ssh-add -D
pkill ssh-agent
echo "Suppression des fichiers générés..."
# shellcheck disable=SC2016
grep -in "printf.*\"\%s\".*\"\$BW_List\"" "${HOME}"/.identities-loaded.sh | grep ">" | cut -d ">" -f 2 | sed -e "s,\~,${HOME},g ; s,\"\$HOME\",${HOME},g ; s,^\ ,,g" | while IFS= read -r each; do
rm -rf "${each}"
done
unset BW_Session
echo "Déconnexion des identités terminée"
tput sgr0
}
identities_create