#!/bin/bash

# Incredible Restore (c) Copyright 2005-2020 Ward Mundy & Associates LLC. All rights reserved.
#                Incredible Restore 2021 is licensed under the GPL2 license
#
#  For a copy of license, visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#

# Unless required by applicable law or agreed to in writing, software distributed under this License
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
# See the License for the specific language governing permissions and limitations under the License.

PROCEEDNOW=false

clear
echo "BY USING INCREDIBLE RESTORE 2021 YOU AGREE TO ASSUME ALL RESPONSIBILITY"
echo "FOR USE OF THE PROGRAMS INCLUDED IN THIS INSTALLATION. NO WARRANTIES"
echo "EXPRESS OR IMPLIED INCLUDING MERCHANTABILITY AND FITNESS FOR PARTICULAR"
echo "USE ARE PROVIDED. YOU ASSUME ALL RISKS KNOWN AND UNKNOWN AND AGREE TO"
echo "HOLD WARD MUNDY, WARD MUNDY & ASSOCIATES LLC, NERD VITTLES, AND THE PBX"
echo "IN A FLASH DEVELOPMENT TEAM HARMLESS FROM ANY AND ALL LOSS OR DAMAGE"
echo "WHICH RESULTS FROM YOUR USE OF THIS SOFTWARE. IF ANY OF THESE TERMS" 
echo "AND CONDITIONS ARE RULED TO BE UNENFORCEABLE, YOU AGREE TO ACCEPT ONE"
echo "DOLLAR IN U.S. CURRENCY AS COMPENSATORY AND PUNITIVE LIQUIDATED DAMAGES"
echo "FOR ANY AND ALL CLAIMS YOU AND ANY USERS OF THIS SOFTWARE MIGHT HAVE."
echo " "

echo "Incredible Restore restores a snapshot of a VoIP server."
echo "Asterisk, MySQL, and Apache are OFF LINE during restore."
echo " "
echo "WARNING: EXISTING FREEPBX CONFIGURATION WILL BE ERASED."
echo "WARNING: EXISTING MYSQL & ASTERISK DATA WILL BE ERASED."
echo " "
echo "Restore to server with same Asterisk + FreePBX version."
echo "If used, reload IncrediblePBX on server before restore."
echo "Backup file shows DATETIME-Asterisk-FreePBX-Incredible."
echo "Move backup to /backup on this server before restore."

# if nothing is passed to the script, show usage and exit
[[ -n "$1" ]] || { echo "Usage: incrediblerestore [/backup/FILENAME.tar.gz]"; exit 0 ; }

echo " "
echo "BACKUP: $1"
echo " "

if [ -e "$1" ]
then

if [ -e "/etc/debian_version" ]; then
 PLATFORM="RP"
else
 PLATFORM="CN"
fi
PF=${1:8:2}
if [ $PLATFORM != $PF ]; then
 echo "Platform mismatch with selected backup file."
# exit
fi

if ! $PROCEEDNOW ; then
 read -p "To restore at your own risk, press the Enter key."
else
 chattr +i /usr/local/sbin/pbxstatus
fi

if [ -e "/etc/debian_version" ]; then
 fwconsole stop
 systemctl stop mysqld
 systemctl stop apache2
 wait
 echo "Restoring backup..."
else
 fwconsole stop
 systemctl stop mysqld
 systemctl stop httpd
 wait
 echo "Restoring backup..."
fi

chattr +i /root/incrediblerestore2021
chattr +i /var/www/html/index*

cd /
rm -rf /var/www/html/admin
#rm -rf /var/lib/asterisk
rm -rf /tftpboot
#rm -rf /etc/asterisk
rm -rf /var/spool/asterisk
cp -p /etc/crontab /etc/crontab2
tar zxvf $1

if [ -e /etc/debian_version ]; then
 systemctl start mysqld
 mysql -u root -ppassw0rd < /root/full-backup.sql
 mysql -u root -ppassw0rd mysql -e "REPAIR TABLE user"
 PW=`grep AMPDBPASS /etc/freepbx.conf | cut -f 2 -d "=" | cut -f 1 -d ";" | cut -f 2 -d "'"`
 mysql -u root -ppassw0rd mysql -e "SET PASSWORD FOR 'freepbxuser'@'localhost' = PASSWORD('$PW');"
 if $PROCEEDNOW ; then
  mysql -u root -ppassw0rd asterisk -e 'delete from kvstore where module="Sipsettings" and `key`="externip"'
  mysql -u root -ppassw0rd asterisk -e 'delete from kvstore where module="Sipsettings" and `key`="localnets"'
  cp -p /etc/crontab2 /etc/crontab
 fi
 systemctl start apache2
 fwconsole start
 fwconsole reload
 fwconsole chown
else
 systemctl start httpd
 systemctl start mysqld
 mysql -u root -ppassw0rd < /root/full-backup.sql
 mysql -u root -ppassw0rd mysql -e "REPAIR TABLE user"
 PW=`grep AMPDBPASS /etc/freepbx.conf | cut -f 2 -d "=" | cut -f 1 -d ";" | cut -f 2 -d "'"`
 mysql -u root -ppassw0rd mysql -e "SET PASSWORD FOR 'freepbxuser'@'localhost' = PASSWORD('$PW');"
 if $PROCEEDNOW ; then
  mysql -u root -ppassw0rd asterisk -e 'delete from kvstore where module="Sipsettings" and `key`="externip"'
  mysql -u root -ppassw0rd asterisk -e 'delete from kvstore where module="Sipsettings" and `key`="localnets"'
  cp -p /etc/crontab2 /etc/crontab
 fi
 fwconsole start
 wait
 fwconsole reload
 wait
 fwconsole chown
# rm -Rf /home/asterisk/{.npm,.npmrc,.node-gyp,.package_cache}
# rm -Rf /var/www/html/admin/modules/pm2/node/node_modules
# fwconsole ma install pm2
# rm -Rf /var/www/html/admin/modules/ucp/node/node_modules
# fwconsole ma enable api
# fwconsole ma install pm2
# fwconsole ma install ucp
# fwconsole ma enable webrtc
# fwconsole ma enable sms
# fwconsole ma enable xmpp
# fwconsole restart
# fwconsole reload
fi

chattr -R -i /root
chattr -i /var/www/html/index*
chattr -i /usr/local/sbin/pbxstatus

sed -i 's|lastupdate2020|lastupdateDEB|' /root/update-IncrediblePBX

echo "Restore finished. Reboot is recommended before use."
echo "BACKUP: $1"

else
 echo "Backup file not found. Exiting."
fi

# end of script
