150 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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
 | 
