#! /bin/bash
Option="$1"
shift
if [ ! -d /usr/local/etc/kedolor ] ; then
	mkdir /usr/local/etc/kedolor
fi
case "$Option" in
-v|-version|--version)
	echo "$0 version 1.0 - 21 mar 2021"
	;;
-h|h|-help|--help|?)
	echo "syntax $0 [-command] [nnn|instructions] where -command is one of:
-help			print this help
-execute [nnn]		wait nnn seconds and execute recovery instructions, default delay is 120 s
-boot			add kedolor call in rc.local
-unboot			remove kedolor call in rc.local
-cron			add kedolor call in crontab
-uncron			remove kedolor call in crontab
-on [instructions]	set active and activation for next reboot in rc.local, no call in crontab
-off			set inactive and unset in rc.local and in crontab
-reset			reset factory defaults in configuration for instructions, head and tail instructions and delay
-update			download a new version
-version		print current version
[nnn]			if not empty, set delay and if on, run $0 -execute in background, else print help 

kedolor configuration is in /usr/local/etc/kedolor and
keeps last used values for instructions and delay as defaults
kedolor log is in /var/log/kedolor.log
"
	;;
-execute)
	if [ ! -f /kedolor ] ; then
		echo "is off `date`" >> /var/log/kedolor.log
		exit 0
	fi
	if [ -z "$1" ] ; then
		if [ -f /usr/local/etc/kedolor/kedolor.delay ] ; then
			waiter=`cat /usr/local/etc/kedolor/kedolor.delay`
		else
			waiter="120"
		fi
	else
		waiter="$1"
	fi
	echo "waiting $waiter seconds before starting rescue actions `date`" >> /var/log/kedolor.log
	sleep $waiter
	if [ -f /kedolor ] ; then
		echo "/kedolor is executed`date`" >> /var/log/kedolor.log
		. /kedolor
	else
		echo "kedolor is not active `date`" >> /var/log/kedolor.log
	fi
	;;
boot|-boot)
	if [ -f /etc/rc.local ] && cat /etc/rc.local | grep -q "kedolor" ; then
		echo "already set in rc.local"
	else
		echo "$0" >> /etc/rc.local
		echo "set in rc.local"
	fi
	;;
unboot|-unboot)
	if [ -f /etc/rc.local ] && cat /etc/rc.local | grep -q "kedolor" ; then
		RcLocal=`cat /etc/rc.local | grep -v "kedolor"`
		echo "$RcLocal" > /etc/rc.local
		echo "unset in rc.local"
	else
		echo "already unset in rc.local"
	fi
	;;
cron|-cron)
	crontab -l > /tmp/kedolor.crontab.$$.tmp
	if ! cat /tmp/kedolor.crontab.$$.tmp | grep -q "kedolor" ; then
		echo "*/3 * * * *	/usr/local/bin/kedolor >> /tmp/kedolor.cron.log 2>&1" >> /tmp/kedolor.crontab.$$.tmp
		crontab /tmp/kedolor.crontab.$$.tmp
		echo "set in crontab"
	else
		echo "already set in crontab"
	fi
	;;
uncron|-uncron)
	if crontab -l | grep -q "kedolor" ; then
		crontab -l | grep -v "kedolor" > /tmp/kedolor.crontab.$$.tmp
		crontab /tmp/kedolor.crontab.$$.tmp
		echo "unset in crontab"
	else
		echo "already unset in crontab"
	fi
	;;
reset|-reset)
	echo "reset to defaults"
	rm -f /usr/local/etc/kedolor/kedolor.head
	rm -f /usr/local/etc/kedolor/kedolor.instructions
	rm -f /usr/local/etc/kedolor/kedolor.tail
	rm -f /usr/local/etc/kedolor/kedolor.delay
	;;
on|-on)
	echo "set and enable kedolor"
	$0 -boot
	Instructions="$*"
	if [ -z "$Instructions" ] ; then
		if [ -f /usr/local/etc/kedolor/kedolor.instructions ] ; then
			Instructions=`cat /usr/local/etc/kedolor/kedolor.instructions`
		else
			Instructions="cp /etc/network/interfaces.dist /etc/network/interfaces ;"
		fi
	fi
	echo "$Instructions" > /usr/local/etc/kedolor/kedolor.instructions
	if [ ! -f /usr/local/etc/kedolor/kedolor.head ] ; then
		echo "#!/bin/bash
echo \"=====================================================\" >> /var/log/kedolor.log
date >> /var/log/kedolor.log
echo \"=======interfaces====================================\" >> /var/log/kedolor.log
cat /etc/network/interfaces >> /var/log/kedolor.log
echo \"=======ifconfig======================================\" >> /var/log/kedolor.log
ifconfig >> /var/log/kedolor.log
echo \"=======iptables======================================\" >> /var/log/kedolor.log
iptables-save >> /var/log/kedolor.log
echo \"=======instructions==================================\" >> /var/log/kedolor.log
echo \"$Instructions\" >> /var/log/kedolor.log
" > /usr/local/etc/kedolor/kedolor.head
	fi
	if [ ! -f /usr/local/etc/kedolor/kedolor.tail ] ; then
		echo "
echo \"=======disable kedolor===============================\" >> /var/log/kedolor.log
/usr/local/bin/kedolor -off >> /var/log/kedolor.log
echo \"=======reboot now====================================\" >> /var/log/kedolor.log
date >> /var/log/kedolor.log
reboot
exit 0" > /usr/local/etc/kedolor/kedolor.tail
	fi
	cat /usr/local/etc/kedolor/kedolor.head > /kedolor
	echo "$Instructions" >> /kedolor
	cat /usr/local/etc/kedolor/kedolor.tail >> /kedolor
	chmod 700 /kedolor
	echo "Following instructions will be executed some time after next reboot before a new reboot"
	cat -n /kedolor
	;;
off|-off)
	echo "disable kedolor"
	rm -f /kedolor
	$0 -unboot
	$0 -uncron
	;;
update|-update|-u)
	cd /usr/local/bin
	OLDVERSION=`$0 --version`
	mv $0 $0.previous
	wget -q http://download.sisalp.net/scripts/kedolor
	chmod 755 $0
	NEWVERSION=`$0 --version`
	case "$NEWVERSION" in
	$OLDVERSION)
		echo "$0 is uptodate $NEWVERSION"
		;;
	*)
		echo "$0 downloaded new version from $download_source $NEWVERSION"		
		;;
	esac
	diff $0.previous $0
	;;
[1-9]*)
	echo "delay is set"
	waiter="$Option"
	echo "$waiter" > /usr/local/etc/kedolor/kedolor.delay
	if [ -f /kedolor ] ; then
		echo "starting count down to $waiter seconds"
		nohup $0 -execute $waiter >> /var/log/kedolor.log 2>&1 &
	else
		echo "is off"
	fi
	;;
*)
	if [ -z "$Option" ] && [ -f /kedolor ] ; then
		if [ -f /usr/local/etc/kedolor/kedolor.delay ] ; then
			waiter=`cat /usr/local/etc/kedolor/kedolor.delay`
		else
			waiter="120"
		fi
		echo "starting count down to $waiter seconds"
		nohup $0 -execute $waiter >> /var/log/kedolor.log 2>&1 &
	else
		echo "is off"
		$0 --help
	fi
	;;
esac
exit 0
