You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kmymoney/contrib/mysqlcrypt.sh

100 lines
3.0 KiB

# mysqlcrypt.sh
# This shell script will run KMyMoney in a MySql database
# and uses the MySql dump program to maintain a copy of the data.
# Additionally, another copy is written to a backup
# directory before running KMyMoney. These backups will be deleted after a
# user-specified number of days.
# Optionally, these data files may be encrypted.
# For encryption, it is necessary that you have the 'gpg' program installed,
# and have set up a key identified by an email address (which may be a pseudo address).
# See 'man gpg' for more info. The kgpg program will help set up these keys.
# DO NOT forget the password associated with gpg; you will need it to access your data.
# Optionally, the data can be removed from the database after KMyMoney finishes,
# and reloaded next time you run.
# It is assumed that your logon user name has the necessary database permissions.
# Please set the following variables to your requirements
MYDIR=$HOME/money # directory where the encrypted copy is to be held
BUDIR=$MYDIR/backup # directory where the backups should go;
FILE=myfin # name for the encrypted copy
DBNAME=KMyMoney # mysql datbase name
DROP=y # (y/n) - whether to delete info from database after running kmm
SILENT=n # if set to y, backups will be deleted silently, else you will be asked
CRYPTEMAIL=me@googlemail.com # delete this line if you don't want encrypted copies
declare -i KEEP=7 # number of days to keep backups
# end of user-changeable directives
if [ ! -d $MYDIR ] ; then
mkdir $MYDIR;
fi
if [ ! -d $BUDIR ] ; then
mkdir $BUDIR;
fi
if [ -z $CRYPTEMAIL ]; then
EFILE=${FILE};
else
EFILE=${FILE}.gpg;
fi
declare NOW=`date +%Y%m%d%H%M%S`
if [ ! -f $MYDIR/$EFILE ] ; then
kdialog --warningcontinuecancel "A version of $FILE does not exist in $MYDIR.\nWhen KMyMoney starts, please open or create a file and use the 'File/Save as Database' function."
if [ $? -ne 0 ]; then
exit;
fi
KMMCMD=-n;
else
KMMCMD=sql://$USER@localhost/$DBNAME?driver=QMYSQL3
# backup file
cp $MYDIR/$EFILE $BUDIR/$NOW$EFILE
LOAD=y
mysql -e "use $DBNAME;" 2>/dev/null
if [ $? -eq 0 ]; then
kdialog --warningyesno "A $DBNAME database exists. Do you wish to run with this?\n If not, the database will be reloaded from the encrypted file"
if [ $? -eq 0 ]; then # replied yes
LOAD=n
fi;
fi;
if [ $LOAD = y ]; then
echo "Reloading from file"
if [ -z $CRYPTEMAIL ]; then
mysql <$MYDIR/$EFILE;
else
gpg --decrypt $MYDIR/$EFILE |mysql;
fi;
fi;
fi
#run kmymoney
kmymoney $KMMCMD
mysqldump --databases -R $DBNAME >$MYDIR/$FILE
if [ ! -z $CRYPTEMAIL ]; then
rm -f $MYDIR/$EFILE
gpg -e -r $CRYPTEMAIL $MYDIR/$FILE
rm $MYDIR/$FILE;
fi
case ${DROP:0:1} in
y | Y) mysql -e "drop database KMyMoney;";;
esac
# delete outdated backup files
cd $BUDIR
for i in `find . -name "*${EFILE}" -ctime +${KEEP}`; do
case ${SILENT:0:1} in
y | Y) ANSWER=y
;;
*) read -p "Delete $i?" ANSWER
;;
esac
case ${ANSWER:0:1} in
y | Y) echo "Deleting $i!"
rm $i
;;
esac
done