2023-03-23 22:56:23 +01:00
|
|
|
#!/bin/bash
|
|
|
|
|
2023-03-26 00:09:15 +01:00
|
|
|
HOME_DIR=$HOME"/.KeepassXC"
|
2023-03-23 22:56:23 +01:00
|
|
|
NOM_BASE="Snorky"
|
|
|
|
EXT_BASE=".kdbx"
|
|
|
|
TMP_DIR="tmp"
|
|
|
|
NULL="/dev/null"
|
|
|
|
DATE=$(date +"%d-%m-%y_%H-%M-%S")
|
|
|
|
ROTATE=3
|
2023-03-24 18:09:51 +01:00
|
|
|
CHECKSUM_FICHIER="checksum.txt"
|
2023-03-23 22:56:23 +01:00
|
|
|
|
|
|
|
# Fonction gestion des erreurs
|
|
|
|
#
|
|
|
|
function die () {
|
|
|
|
|
|
|
|
case $1 in
|
|
|
|
1)
|
|
|
|
echo -e "Le repertoire $HOME_DIR n'existe pas."
|
|
|
|
echo -e "Modifier la variable HOME_DIR."
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
2)
|
|
|
|
echo -e "Le process Keepassxc est en cours d'execution."
|
|
|
|
echo -e "Veuillez le fermer et relancer le script."
|
|
|
|
echo -e "ex: kill -9 $2"
|
|
|
|
exit 2
|
|
|
|
;;
|
|
|
|
3)
|
|
|
|
echo -e "Erreur lors de la copie."
|
|
|
|
exit 3
|
|
|
|
;;
|
2023-03-23 23:41:00 +01:00
|
|
|
4)
|
|
|
|
echo -e "La base $2 n'existe pas."
|
|
|
|
exit 4
|
|
|
|
;;
|
2023-03-23 22:56:23 +01:00
|
|
|
esac
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
# Fonction de verification si keepass tourne.
|
|
|
|
#
|
|
|
|
function check_keepassxc () {
|
2023-03-24 09:21:05 +01:00
|
|
|
|
2023-03-23 22:56:23 +01:00
|
|
|
for process in $(ls -dv /proc/[0-9]* 2> $NULL); do
|
|
|
|
if grep -qiE "keepassxc$" $process/status 2> $NULL; then
|
|
|
|
K_PID=$(echo $process | cut -d "/" -f3)
|
|
|
|
die 2 $K_PID
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
echo "Aucun process Keepass en cours d'execution."
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
# Fonction de verification du repertoire $HOME_DIR/tmp
|
|
|
|
#
|
|
|
|
function check_tmp () {
|
|
|
|
|
|
|
|
if [ ! -d $TMP_DIR ]; then
|
|
|
|
echo -e "Le repertoire tmp n'existe pas."
|
|
|
|
echo -e "Creation du repertoire."
|
|
|
|
mkdir $TMP_DIR
|
|
|
|
else
|
|
|
|
echo "Le repertoire tmp existe deja."
|
|
|
|
fi
|
|
|
|
|
|
|
|
}
|
2023-03-24 09:21:05 +01:00
|
|
|
|
2023-03-23 22:56:23 +01:00
|
|
|
# Fonction de rotation des bases a sauvegarder dans le git.
|
|
|
|
# Gestion du git add/remove dans un deuxieme temps.
|
2023-03-24 09:21:05 +01:00
|
|
|
#
|
2023-03-23 22:56:23 +01:00
|
|
|
function base_rotation () {
|
|
|
|
|
|
|
|
cd $HOME_DIR/$TMP_DIR
|
|
|
|
for nb in $(seq 0 $(( $ROTATE - 1))); do
|
|
|
|
if [ $(( $ROTATE - $nb )) -ne $ROTATE ]; then
|
|
|
|
if [ -f "$(( $ROTATE - $nb ))_$NOM_BASE"* ]; then
|
2023-03-23 23:41:00 +01:00
|
|
|
NOM_TMP=$(ls "$(( $ROTATE - $nb ))_$NOM_BASE"* \
|
|
|
|
| cut -d "_" -f2-)
|
|
|
|
git mv $(( $ROTATE - $nb ))_$NOM_BASE* \
|
|
|
|
"$(( $ROTATE - $nb + 1 ))_$NOM_TMP"
|
2023-03-23 22:56:23 +01:00
|
|
|
fi
|
|
|
|
else
|
|
|
|
NOM_TMP=$(ls "$(( $ROTATE - $nb ))_$NOM_BASE"* | cut -d "_" -f2-)
|
|
|
|
git rm $(( $ROTATE - $nb ))_$NOM_BASE*
|
|
|
|
git commit -m "Remove de $NOM_TMP"
|
|
|
|
git push
|
|
|
|
fi
|
|
|
|
done
|
2023-03-24 09:21:05 +01:00
|
|
|
|
2023-03-23 22:56:23 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
# Fonction de copie de la base avant de push sur le git
|
|
|
|
#
|
|
|
|
function copie_base () {
|
|
|
|
|
|
|
|
cd $HOME_DIR
|
2023-03-23 23:41:00 +01:00
|
|
|
cp $NOM_BASE$EXT_BASE $TMP_DIR/"1_$NOM_BASE-$DATE$EXT_BASE"
|
2023-03-23 22:56:23 +01:00
|
|
|
git add tmp/1_*
|
|
|
|
echo "Verification des HASH."
|
|
|
|
HASH_BASE=$(md5sum $NOM_BASE$EXT_BASE | cut -d " " -f1)
|
|
|
|
HASH_COPY=$(md5sum $TMP_DIR/"1_"* | cut -d " " -f1)
|
|
|
|
|
|
|
|
echo -e "Hash de la base originale: \n"$HASH_BASE
|
|
|
|
echo -e "Hash de la base copiee: \n"$HASH_COPY
|
|
|
|
|
|
|
|
#if [ ${HASH_BASE} == 00000000000 ]; then
|
|
|
|
if [ ${HASH_BASE} == ${HASH_COPY} ]; then
|
|
|
|
echo -e "Les bases sont identiques."
|
|
|
|
else
|
|
|
|
die 3
|
|
|
|
fi
|
2023-03-24 09:21:05 +01:00
|
|
|
|
2023-03-23 22:56:23 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
# Fonction de generation du fichier des checksums et de l'upload
|
|
|
|
# sur gitea
|
|
|
|
function git_upload () {
|
2023-03-24 09:21:05 +01:00
|
|
|
|
2023-03-23 22:56:23 +01:00
|
|
|
cd $TMP_DIR
|
|
|
|
echo > $CHECKSUM_FICHIER
|
|
|
|
for nb in $(seq 1 $ROTATE); do
|
|
|
|
md5sum ${nb}_* >> $CHECKSUM_FICHIER
|
|
|
|
done
|
|
|
|
md5sum $CHECKSUM_FICHIER >> $CHECKSUM_FICHIER
|
|
|
|
git add *
|
|
|
|
git commit -m "Backup base $DATE"
|
|
|
|
git push
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2023-03-24 09:21:05 +01:00
|
|
|
# Fonction principale
|
|
|
|
#
|
2023-03-23 22:56:23 +01:00
|
|
|
function main () {
|
|
|
|
|
|
|
|
# Deplacement dans le home
|
|
|
|
cd $HOME_DIR 2>$NULL || die 1
|
2023-03-23 23:41:00 +01:00
|
|
|
[ -e $NOM_BASE$EXT_BASE ] || die 4 $NOM_BASE$EXT_BASE
|
2023-03-23 22:56:23 +01:00
|
|
|
|
|
|
|
# Verification que le process Keepassxc ne tourne pas
|
|
|
|
# afin de ne pas corrompre la base lors de la copie
|
|
|
|
# à chaud.
|
|
|
|
check_keepassxc
|
|
|
|
|
|
|
|
# Verification du répertoire tmp
|
|
|
|
check_tmp
|
|
|
|
|
|
|
|
# Rotation des bases
|
|
|
|
base_rotation
|
|
|
|
# Copie de la base et verification md5
|
|
|
|
copie_base
|
|
|
|
|
|
|
|
# upload de la base sur gitea
|
|
|
|
git_upload
|
2023-03-24 09:21:05 +01:00
|
|
|
|
2023-03-23 22:56:23 +01:00
|
|
|
echo
|
|
|
|
exit 0
|
|
|
|
}
|
|
|
|
|
|
|
|
main
|