#!/bin/bash
#
# Resets ConfFS, AppFS, UserAppFS and / or network config
#
# VERSION=8
# CHANGES="make sure userappfs' www/shared and index.php are not deleted!"

# global variables #
export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/fallback
BEROCONF=/usr/fallback/beroconf
umask 077

# functions #
function log () {
	echo "[init_factoryreset] $(date): ${1}"
}

function module_load () {

	if [ ! -z "$(lsmod | grep resetjumper)" ]; then
		log "Module resetjumper.ko already loaded, leaving."
		return
	fi

	log "Loading module 'resetjumper.ko'."
	insmod /lib/modules/resetjumper.ko > /dev/null
}

function cleanup_config () {
	log "Cleaning up ConfFS."
        rm -rf /usr/conf/*
}

function cleanup_app () {
	log "Cleaning up AppFS."
	mount -oremount,rw /usr/local 2> /dev/null
	rm -rf /usr/local/*
	sleep 1; sync; sync; sleep 1
	mount -oremount,ro /usr/local 2> /dev/null
}

function reset_root () {
	log "Resetting RootFS-Version."
	mount -oremount,rw / 2> /dev/null
	rm -rf /pkginfo
	sleep 1; sync; sync; sleep 1
	mount -oremount,ro / 2> /dev/null
}

function cleanup_userapp () {

	log "Cleaning up UserAppFS."
	mount -oremount,rw /home/admin > /dev/null
	rm -rf /home/admin/apps/*
	for i in $(ls /home/admin/www); do
		if [ -L /home/admin/www/${i} ]; then
			if [ "${i}" != "shared"] || [ "${i}" != "index.php" ]; then
				rm -rf /home/admin/www/${i}
			fi
		fi
	done
	sleep 1; sync; sync; sleep 1
	mount -oremount,ro /home/admin > /dev/null
}

function reset_netconf () {

	log "Resetting Network-Configuration."
	${BEROCONF} set root lan-dhcp yes 2> /dev/null
	${BEROCONF} set root beroAvahi-enabled yes 2> /dev/null
	${BEROCONF} delete root lan-ipaddr 2> /dev/null
	${BEROCONF} delete root lan-netmask 2> /dev/null
	${BEROCONF} delete root lan-gateway 2> /dev/null
	${BEROCONF} delete root disable_ncs 2> /dev/null
	${BEROCONF} set root lan-mtu 1500 2> /dev/null
	${BEROCONF} set root lan-nameserver "8.8.8.8;8.8.4.4" 2> /dev/null
	${BEROCONF} set root ntphost ntp0.fau.de 2> /dev/null

	/usr/fallback/update-interfaces
}

function reset_full () {

	log "Performing Full-Reset."
	cleanup_config
	cleanup_userapp
	cleanup_app
	reset_root
}

function reset_jumper () {

	module_load
	if [ "$(cat /proc/RESET_JUMPER)" -eq "0" ]; then
		log "Reset-Pins: open."
		return
	fi

	log "Reset-Pins: closed."
	reset_full
	reset_netconf
}

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

exit 0
