Keepass_Sauvegarde/keepassxc-svg.sh

161 lines
3.7 KiB
Bash
Raw Normal View History

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-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-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-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-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-23 22:56:23 +01:00
}
# Fonction de generation du fichier des checksums et de l'upload
# sur gitea
function git_upload () {
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
}
# 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-23 22:56:23 +01:00
echo
exit 0
}
main