Skip to content

Commit 4c81480

Browse files
authored
Merge pull request #1 from snouky/main
Améliorations de sécurité et de fiabilité du script Bash
2 parents acb8557 + 02692dd commit 4c81480

1 file changed

Lines changed: 60 additions & 19 deletions

File tree

github.sh

Lines changed: 60 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,17 @@
11
#!/bin/bash
22

3-
echo "Bienvenue sur Sendgit ! Que voulez-vous faire ? "
3+
# Ajout de sécurité Bash : arrête le script sur erreur, référence non définie ou pipe cassée
4+
set -euo pipefail
5+
6+
# Réglage du séparateur de champs pour éviter les erreurs avec les espaces et retours à la ligne
7+
IFS=$'\n\t'
8+
9+
if ! command -v git &> /dev/null; then
10+
echo "❌ Git n'est pas installé. Veuillez l'installer avant d'utiliser Sendgit."
11+
exit 1
12+
fi
13+
14+
echo "Bienvenue sur Sendgit ! Que voulez-vous faire ?"
415
echo "1: Envoyer mes modifications sur GitHub"
516
echo "2: Récupérer les modifications"
617
echo "3: Voir le log complet des historiques"
@@ -14,63 +25,93 @@ echo ""
1425

1526
case "$action" in
1627
1)
17-
echo " Fichiers modifiés "
18-
git status -s
28+
echo "Fichiers modifiés :"
29+
git status -s || { echo "Erreur lors de l'affichage du status Git"; exit 1; }
30+
# Ajout d'une vérification de sortie de la commande Git
31+
1932
echo ""
2033

2134
read -rp "Message du commit : " commit
35+
[[ -z "$commit" ]] && { echo " Le message de commit est obligatoire."; exit 1; }
36+
# Empêche les commits sans message (sécurité + bonne pratique)
37+
2238
read -rp "Fichier à envoyer (ou '.' pour tous) : " name
39+
[[ -z "$name" ]] && { echo " Nom de fichier requis."; exit 1; }
40+
# Évite d'exécuter git add sans fichier défini
41+
2342
read -rp "Branche (laisser vide pour 'main') : " branch
24-
branch=${branch:-main}
43+
branch=${branch:-main} # Valeur par défaut sécurisée
2544

2645
echo "Ajout des fichiers..."
27-
git add "$name"
46+
git add -- "$name" || { echo " Erreur lors de l'ajout des fichiers."; exit 1; }
47+
# Ajout du double tiret pour bloquer les options malicieuses dans le nom de fichier
48+
# Vérification de l’exécution de git add
2849

2950
echo "Création du commit..."
30-
git commit -m "$commit"
51+
git commit -m "$commit" || { echo "Erreur lors du commit."; exit 1; }
52+
# Vérifie que le commit s’est bien effectué
3153

3254
echo "Envoi vers la branche '$branch'..."
33-
git push origin "$branch"
55+
git push origin "$branch" || { echo " Échec du push."; exit 1; }
56+
# Empêche que le script continue si le push échoue
3457
;;
3558

3659
2)
3760
echo "Récupération des dernières modifications..."
38-
git pull
61+
git pull || { echo " Échec du pull."; exit 1; }
62+
# Sécurisation de git pull
3963
;;
4064

4165
3)
42-
echo " Log complet "
43-
git log
66+
echo "Log complet :"
67+
git log || { echo " Impossible d'afficher le log."; exit 1; }
68+
# Vérifie que git log ne plante pas
4469
;;
4570

4671
4)
47-
echo " Résumé des commits "
48-
git log --oneline
72+
echo "Résumé des commits :"
73+
git log --oneline || { echo " Impossible d'afficher le résumé."; exit 1; }
74+
# Vérifie aussi pour git log --oneline
4975
;;
5076

5177
5)
52-
git log --oneline
78+
git log --oneline || { echo " Erreur lors de l'affichage du log."; exit 1; }
5379
echo ""
54-
read -rp "ID du commit (voir ci-dessus) : " commitname
80+
81+
read -rp "ID du commit : " commitname
82+
[[ -z "$commitname" ]] && { echo "ID de commit requis."; exit 1; }
83+
# Évite un checkout vide
84+
5585
read -rp "Nom du fichier à restaurer : " filename
86+
[[ -z "$filename" ]] && { echo " Nom de fichier requis."; exit 1; }
87+
# Empêche les noms vides
5688

5789
if git checkout "$commitname" -- "$filename"; then
58-
echo "Fichier '$filename' restauré depuis le commit $commitname."
90+
echo " Fichier '$filename' restauré depuis le commit $commitname."
5991
else
60-
echo "Erreur : impossible de restaurer le fichier."
92+
echo " Erreur : impossible de restaurer le fichier."
93+
exit 1
6194
fi
95+
# Ajout de la vérification pour sécuriser git checkout
6296
;;
6397

6498
6)
65-
echo " Branches disponibles "
66-
git branch
99+
echo "Branches disponibles :"
100+
git branch || { echo " Erreur lors de la lecture des branches."; exit 1; }
101+
# Vérifie git branch
102+
67103
echo ""
68104
read -rp "Branche à rejoindre : " branch
69-
git switch "$branch"
105+
[[ -z "$branch" ]] && { echo " Nom de branche requis."; exit 1; }
106+
# Évite le switch sans nom
107+
108+
git switch "$branch" || { echo " Erreur lors du changement de branche."; exit 1; }
109+
# Sécurise le changement de branche
70110
;;
71111

72112
*)
73113
echo "Choix invalide. Veuillez entrer un nombre entre 1 et 6."
74114
exit 1
115+
# Meilleure gestion des choix incorrects
75116
;;
76117
esac

0 commit comments

Comments
 (0)