#!/bin/bash
# this is the helper script. you don't need to run it directly


# create lockfile
# not used in this script, but used to avoid conclicts with 01-origin.sh
touch /tmp/wp-sync.lock

# if the script isn't running from /usr/local/bin, we assume that the user did run it manually by mistake
if ! dirname $0 | grep -qs "/usr/local/bin"; then
    echo "This script is not meant to be used standalone"
    echo
    echo "Run 71-origin.sh to configure it"

	# remove lockfile
	rm -f /tmp/wp-sync.lock	
	
    exit
fi

# if destination host is unavailable, we are done
if ! ssh -o ConnectTimeout=30 -o StrictHostKeyChecking=no -o PasswordAuthentication=no root@$dest "echo" &>/dev/null; then
    echo "$(date) Destination server not connectable" >> /var/log/wp-sync.log

	# remove lockfile
	rm -f /tmp/wp-sync.lock	

    exit
else
    echo "$(date) Starting wp-sync job" >> /var/log/wp-sync.log
fi



# remove leftover from 71-origin.sh
# if we reached this point, wp-sync is now fully configured
rm -f /var/www/html/51796720716872671235391607993835.pub



# export users
awk -F: '($3>=500) && ($3!=65534) && ($4==33)' /etc/passwd > /root/passwd.prod
awk -F: '($3>=500) && ($3!=65534) {print $1}' /etc/passwd | grep -f - /etc/shadow > /root/shadow.prod
# sync users to destination
rsync -a -e 'ssh -o StrictHostKeyChecking=no' /root/passwd.prod $dest:/root/passwd.prod
rsync -a -e 'ssh -o StrictHostKeyChecking=no' /root/shadow.prod $dest:/root/shadow.prod
rm -f /root/passwd.prod /root/shadow.prod
# set up users in the destination
ssh -o StrictHostKeyChecking=no root@$dest "awk -F: '(\$3<500) || (\$4!=33)' /etc/passwd > /root/passwd.new && cat /root/passwd.prod >> /root/passwd.new && cppw /root/passwd.new" && echo "$(date) User sync completed" >> /var/log/wp-sync.log || echo "$(date) User sync failed" >> /var/log/wp-sync.log
ssh -o StrictHostKeyChecking=no root@$dest "awk -F: '(\$3<500) {print \$1}' /etc/passwd | grep -f - /etc/shadow > /root/shadow.new && cat /root/shadow.prod >> /root/shadow.new && cppw -s /root/shadow.new"
ssh -o StrictHostKeyChecking=no root@$dest "rm -f /root/passwd.prod /root/passwd.new /root/shadow.prod /root/shadow.new"



# dump all databases
mysqldump --all-databases --add-drop-database > /root/databases_backup.sql
# dump all mysql users and passwords
mariadb -e"select concat('show grants for ','\'',user,'\'@\'',host,'\'') from mysql.user" > /root/user_list_with_header.txt
sed '1d' /root/user_list_with_header.txt > /root/user.txt
while read user; do  mariadb -e"$user" > /root/user_grant.txt; sed '1d' /root/user_grant.txt >> /root/user_privileges.txt; echo "flush privileges" >> /root/user_privileges.txt; done < /root/user.txt
awk '{print $0";"}'  /root/user_privileges.txt >/root/user_privileges_final.sql
# sync sql files to destination
rsync -a -e 'ssh -o StrictHostKeyChecking=no' /root/user_privileges_final.sql $dest:/root/user_privileges_final.sql
rsync -a -e 'ssh -o StrictHostKeyChecking=no' /root/databases_backup.sql $dest:/root/databases_backup.sql
rm -f /root/user.txt /root/user_list_with_header.txt /root/user_grant.txt /root/user_privileges.txt /root/user_privileges_final.sql /root/databases_backup.sql
# import in destination
ssh -o StrictHostKeyChecking=no root@$dest "mariadb < /root/databases_backup.sql"
ssh -o StrictHostKeyChecking=no root@$dest "mariadb < /root/user_privileges_final.sql" && echo "$(date) Database import completed" >> /var/log/wp-sync.log || echo "$(date) Database import failed" >> /var/log/wp-sync.log
ssh -o StrictHostKeyChecking=no root@$dest "rm -f /root/databases_backup.sql /root/user_privileges_final.sql"



# sync files
rsync -a --delete -e 'ssh -o StrictHostKeyChecking=no' /var/www root@$dest:/var && echo "$(date) Site sync completed" >> /var/log/wp-sync.log || echo "$(date) Site sync failed" >> /var/log/wp-sync.log
rsync -a --delete -e 'ssh -o StrictHostKeyChecking=no' /etc/nginx root@$dest:/etc
rsync -a --delete -e 'ssh -o StrictHostKeyChecking=no' /etc/php root@$dest:/etc
rsync -a --delete -e 'ssh -o StrictHostKeyChecking=no' /etc/letsencrypt root@$dest:/etc
# exclude root crontab because we don't want to migrate the backup wp-backup job
rsync -a --delete -e 'ssh -o StrictHostKeyChecking=no' --exclude /var/spool/cron/crontabs/root /var/spool/cron root@$dest:/var/spool



# restart services
ssh -o StrictHostKeyChecking=no root@$dest "systemctl restart php5.6-fpm" && echo "$(date) PHP 5.6 restart completed" >> /var/log/wp-sync.log || echo "$(date) PHP 5.6 restart failed" >> /var/log/wp-sync.log
ssh -o StrictHostKeyChecking=no root@$dest "systemctl restart php7.1-fpm" && echo "$(date) PHP 7.1 restart completed" >> /var/log/wp-sync.log || echo "$(date) PHP 7.1 restart failed" >> /var/log/wp-sync.log
ssh -o StrictHostKeyChecking=no root@$dest "systemctl restart php7.2-fpm" && echo "$(date) PHP 7.2 restart completed" >> /var/log/wp-sync.log || echo "$(date) PHP 7.2 restart failed" >> /var/log/wp-sync.log
ssh -o StrictHostKeyChecking=no root@$dest "systemctl restart php7.3-fpm" && echo "$(date) PHP 7.3 restart completed" >> /var/log/wp-sync.log || echo "$(date) PHP 7.3 restart failed" >> /var/log/wp-sync.log
ssh -o StrictHostKeyChecking=no root@$dest "systemctl restart php7.4-fpm" && echo "$(date) PHP 7.4 restart completed" >> /var/log/wp-sync.log || echo "$(date) PHP 7.4 restart failed" >> /var/log/wp-sync.log
ssh -o StrictHostKeyChecking=no root@$dest "systemctl restart php8.0-fpm" && echo "$(date) PHP 8.0 restart completed" >> /var/log/wp-sync.log || echo "$(date) PHP 8.0 restart failed" >> /var/log/wp-sync.log
ssh -o StrictHostKeyChecking=no root@$dest "systemctl restart php8.1-fpm" && echo "$(date) PHP 8.1 restart completed" >> /var/log/wp-sync.log || echo "$(date) PHP 8.1 restart failed" >> /var/log/wp-sync.log
ssh -o StrictHostKeyChecking=no root@$dest "systemctl restart nginx" && echo "$(date) nginx restart completed" >> /var/log/wp-sync.log || echo "$(date) nginx restart failed" >> /var/log/wp-sync.log
ssh -o StrictHostKeyChecking=no root@$dest "systemctl restart cron" && echo "$(date) cron restart completed" >> /var/log/wp-sync.log || echo "$(date) cron restart failed" >> /var/log/wp-sync.log



# sync sshd config
sed -e '1,/do not edit from here/ d' /etc/ssh/sshd_config > /root/sshdmatches
rsync -a -e 'ssh -o StrictHostKeyChecking=no' /root/sshdmatches $dest:/root/sshdmatches
rm -f /root/sshdmatches
ssh -o StrictHostKeyChecking=no root@$dest 'sed -i "/do not edit from here/q" /etc/ssh/sshd_config && cat /root/sshdmatches >> /etc/ssh/sshd_config && rm -f /root/sshdmatches'
ssh -o StrictHostKeyChecking=no root@$dest "systemctl restart sshd" && echo "$(date) SSH restart completed" >> /var/log/wp-sync.log || echo "$(date) SSH restart failed" >> /var/log/wp-sync.log



# remove lockfile
rm -f /tmp/wp-sync.lock