commit ea0e8b05c23637f3c175109b9db2fce478b96360 Author: Snorky Date: Thu Mar 23 22:56:23 2023 +0100 first commit diff --git a/savekxc b/savekxc new file mode 100755 index 0000000..2766d54 --- /dev/null +++ b/savekxc @@ -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