#!/bin/bash
#
# Resets ConfFS, AppFS, UserAppFS and / or network config
#
# VERSION=4
# CHANGES="delete lan-nameserver entry"

PREFIX="[berofix_factory_reset]"

PATH=/bin:/usr/bin:/sbin:/usr/sbin

BEROCONF=/usr/fallback/beroconf
UPDATEIF=/usr/fallback/update-interfaces.bin

RESETMOD=/lib/modules/resetjumper.ko
APPROOT=/usr/local
ADMROOT=/home/admin

umask 077

function module_load {

	loaded=$(lsmod | grep resetjumper)

	if [ ! -z "${loaded}" ]; then
		echo "${PREFIX} Module resetjumper.ko already loaded, leaving."
	else
		echo -n "${PREFIX} Loading module resetjumper.ko: "
		insmod ${RESETMOD} > /dev/null
		echo "Done."
	fi
}

function cleanup_config {

	echo -n "${PREFIX}  * Cleaning up ConfFS: "
        rm -rf /usr/conf/*
	echo "Done."
}

function cleanup_app() {

	echo -n "${PREFIX}  * Cleaning up AppFS: "
	mount -oremount,rw ${APPROOT} > /dev/null
        rm -rf ${APPROOT}/*
	sleep 1; sync; sync; sleep 1
        mount -oremount,ro ${APPROOT} > /dev/null
	echo "Done."
}


function cleanup_userapp {

	echo -n "${PREFIX}  * Cleaning up UserAppFS: "
	mount -oremount,rw ${ADMROOT} > /dev/null
	rm -rf ${ADMROOT}/apps/*
	for i in $(ls ${ADMROOT}/www | grep -v index.php); do
		rm -rf ${ADMROOT}/www/${i}
	done
	sleep 1; sync; sync; sleep 1
	mount -oremount,ro ${ADMROOT} > /dev/null
	echo "Done."
}

function reset_full {

	echo "${PREFIX} PERFORMING FULL RESET!"
	cleanup_config
	cleanup_userapp
	cleanup_app
	echo "${PREFIX} FULL RESET COMPLETE!"
}

function reset_netconf {

	echo "${PREFIX} PERFORMING NETWORK CONFIG RESET!"
	${BEROCONF} set root lan-ipaddr 10.0.0.2 2> /dev/null
        ${BEROCONF} set root lan-netmask 255.0.0.0 2> /dev/null
        ${BEROCONF} set root lan-gateway 10.0.0.1 2> /dev/null
        ${BEROCONF} delete root lan-nameserver 2> /dev/null
        ${BEROCONF} set root lan-mtu 1500 2> /dev/null
        ${BEROCONF} set root ntphost de.pool.ntp.org 2> /dev/null
	echo "${PREFIX} NETWORK CONFIG RESET COMPLETE!"
}

function reset_jumper {

	echo -n "${PREFIX} State of reset-pins: "
	jumper_plugged=$(cat /proc/RESET_JUMPER)
	if [ "${jumper_plugged}" -eq "1" ]; then
		echo "closed."
		reset_full
		reset_netconf

		if [ -x ${UPDATEIF} ] ;then
			${UPDATEIF}
		fi
	else
		echo "open."
	fi
}

case "${1}" in
	start)
		module_load
		reset_jumper
		;;
	full-reset)
		module_load
		reset_full
		;;
	*)
		echo "${PREFIX} Usage: ${0} [start|full-reset]" &>2
		exit 1
esac

exit 0
