150 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			150 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | #!/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 |