first commit

This commit is contained in:
Snorky 2023-03-23 22:56:23 +01:00
commit ea0e8b05c2

149
savekxc Executable file
View File

@ -0,0 +1,149 @@
#!/bin/bash
HOME_DIR=$HOME"/.KeepassXC"
NOM_BASE="Snorky"
EXT_BASE=".kdbx"
TMP_DIR="tmp"
NULL="/dev/null"
DATE=$(date +"%d-%m-%y_%H-%M-%S")
ROTATE=3
CHECKSUM_FICHIER="checksum.txk"
# 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
;;
esac
}
# Fonction de verification si keepass tourne.
#
function check_keepassxc () {
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
}
# Fonction de rotation des bases a sauvegarder dans le git.
# Gestion du git add/remove dans un deuxieme temps.
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
NOM_TMP=$(ls "$(( $ROTATE - $nb ))_$NOM_BASE"* | cut -d "_" -f2-)
git mv $(( $ROTATE - $nb ))_$NOM_BASE* "$(( $ROTATE - $nb + 1 ))_$NOM_TMP"
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
}
# Fonction de copie de la base avant de push sur le git
#
function copie_base () {
cd $HOME_DIR
cp $NOM_BASE$EXT_BASE $TMP_DIR/"1_$NOM_BASE-$DATE$EXT_BASE"
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
}
# Fonction de generation du fichier des checksums et de l'upload
# sur gitea
function git_upload () {
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
}
function main () {
# Deplacement dans le home
cd $HOME_DIR 2>$NULL || die 1
# 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
echo
exit 0
}
main