#!/bin/sh

. /etc/PG.conf

err_count=1

RAMDISK="/usr/ramdisk"
USER_DIR="${RAMDISK}/etc/webuser"
MGT_CONF=${PGETC}/ifadmin.conf
IPECTRL="${RAMDISK}/bin/ipectrl"
ESCTOOL="${RAMDISK}/bin/esctool"
OLD_PSWD_FILE="${PGPATH}/admin/.htpasswd"

READ="read -t 10 "


show_menu()
{
	clear
	echo "************************************"
	echo "*             MENU                 *"
	echo "************************************"
	echo "*    1. SHOW ADMIN IP              *"
	echo "*    2. SHOW WEB USER              *"
	echo "*    3. EDIT ADMIN IP              *"
	echo "*    4. EDIT WEB USER              *"
	echo "*    5. ADD  WEB USER              *"
	echo "*    6. RMV  WEB USER              *"
	echo "*    e. EXIT                       *"
	echo "************************************"
	echo "*  Please Select [1-6] or 'e'      *"
	echo "************************************"
	echo ""
}


read_timeout()
{
	echo ""
	echo ""
	echo "INPUT TIMEOUT. EXIT!"
	exit 0
}


is_ipaddr()
{
	echo $1 | grep "^[0-9]\{1,3\}\.\([0-9]\{1,3\}\.\)\{2\}[0-9]\{1,3\}$" > /dev/null;
	[ $? -ne 0 ] && return 1

	uipaddr=$1
	a=`echo $uipaddr|awk -F . '{print $1}'`
	b=`echo $uipaddr|awk -F . '{print $2}'`
	c=`echo $uipaddr|awk -F . '{print $3}'`
	d=`echo $uipaddr|awk -F . '{print $4}'`

	for num in $a $b $c $d
	do
		[ $num -gt 255 ] || [ $num -lt 0 ] && return 1
	done
	
	return 0
}


show_admin_ip()
{
	echo "---------ADMIN PORT IP----------"
	cat ${MGT_CONF}
	echo "--------------------------------"
	echo ""
}


edit_admin_ip()
{
	NEW_IPADDR=""
	NEW_MASK=""
	NEW_GATEWAY=""

	show_admin_ip

	echo -n "Confirm to edit IPaddr ?[y/n] "
	${READ} answer || read_timeout

	if [ "${answer}" = "y" -o "${answer}" = "Y" ]; then
		while [ "${NEW_IPADDR}" = "" ]
		do
			echo -n ">>ADMIN_IP:"
			${READ} NEW_IPADDR || read_timeout
		done

		while [ "${NEW_MASK}" = "" ]
		do
			echo -n ">>ADMIN_MASK:"
			${READ} NEW_MASK || read_timeout
		done

		while [ "${NEW_GATEWAY}" = "" ]
		do
			echo -n ">>GATEWAY:"
			${READ} NEW_GATEWAY || read_timeout
		done

		show_menu

		if is_ipaddr $NEW_IPADDR && is_ipaddr $NEW_MASK && is_ipaddr $NEW_GATEWAY; then
			echo "ADMIN_IP=${NEW_IPADDR}" > ${MGT_CONF}
			echo "ADMIN_MASK=${NEW_MASK}" >> ${MGT_CONF}
			echo "GATEWAY=${NEW_GATEWAY}" >> ${MGT_CONF}

			${IPECTRL} start network

			echo ""
			show_admin_ip
       		else
			show_menu
			echo "-------------ERROR-------------"
			echo "Change ipaddr Failed!"
			echo "ip,mask,or getway was wrong "
			echo "-------------------------------"
		fi
	fi
}


user_list()
{
	echo "---------WEB USER LIST----------"

	for file in `ls ${USER_DIR} | grep -v ".json"`
	do
		. ${USER_DIR}/${file}
		pswd=`${ESCTOOL} -d ${password}`
		echo "${name} ${pswd}"
	done
	
	echo "-------------------------------"
}


edit_user()
{
	new_username=""
	new_password=""

	user_list

	while [ "${new_username}" = "" ]
	do
		echo -n ">>Enter Username: "
		${READ} new_username || read_timeout
	done

	while [ "${new_password}" = "" ]
	do
		echo -n ">>Enter Password: "
		${READ} new_password || read_timeout
	done


	ufile="${USER_DIR}/`${ESCTOOL} -e ${new_username}`"

	if [ ! -f ${ufile} ]; then
		show_menu
		echo "### USER NOT FOUND!"	
		user_list
		return 1
	fi

	. ${ufile}

	esc_passwd=`${ESCTOOL} -e ${new_password}`

	echo "name=${new_username}" > ${ufile}
	echo "password=${esc_passwd}" >> ${ufile}
	echo "lastedit=`date +%s`" >> ${ufile}
	echo "level=${level}" >> ${ufile}
	echo "iptab_id=${iptab_id}" >> ${ufile}
	echo "iptab_name=${iptab_name}" >> ${ufile}

	cp "${ufile}" "${PGPATH}/etc/webuser/"

	# ޸ľļ
	grep -v "${new_username}:" ${OLD_PSWD_FILE} >> ${OLD_PSWD_FILE}.bak
	echo "${new_username}:${new_password}" >> ${OLD_PSWD_FILE}.bak
	mv ${OLD_PSWD_FILE}.bak ${OLD_PSWD_FILE}
	cp ${OLD_PSWD_FILE} ${RAMDISK}/admin/
	sync

	show_menu
	echo "### EDIT SUCCESS!"
	echo ""
	user_list
}


add_user()
{
	new_username=""
	new_password=""

	user_list

	while [ "${new_username}" = "" ]
	do
		echo -n ">>Enter Username: "
		${READ} new_username || read_timeout
	done

	while [ "${new_password}" = "" ]
	do
		echo -n ">>Enter Password: "
		${READ} new_password || read_timeout
	done

	ufile="${USER_DIR}/`${ESCTOOL} -e ${new_username}`"
	
	if [ -f ${ufile} ]; then
		show_menu
		echo "### USER EXIST!"
		user_list
		return 1
	fi

	esc_passwd=`${ESCTOOL} -e ${new_password}`

	echo "name=${new_username}" > ${ufile}
	echo "password=${esc_passwd}" >> ${ufile}
	echo "lastedit=`date +%s`" >> ${ufile}
	echo "level=1" >> ${ufile}
	echo "iptab_id=" >> ${ufile}
	echo "iptab_name=" >> ${ufile}
	cp ${ufile} ${PGPATH}/etc/webuser/

	# ļ
	echo "${new_username}:${new_password}" >> ${OLD_PSWD_FILE}
	cp ${OLD_PSWD_FILE} ${RAMDISK}/admin/

	cp "${ufile}" "${PGPATH}/etc/webuser/"
	sync

	show_menu
	echo "### ADD SUCCESS!"
	echo ""
	user_list
}


rmv_user()
{
	username=""

	user_list

	while [ "${username}" = "" ]
	do
		echo -n ">>Enter Username: "
		${READ} username || read_timeout
	done

	ufile="${USER_DIR}/`${ESCTOOL} -e ${new_username}`"

	if [ ! -f ${ufile} ]; then
		show_menu
		echo "### USER NOT FOUND!"
		echo ""
		user_list
		return 1
	fi

	rm -rf ${ufile}
	rm -rf ${PGPATH}/etc/webuser/${ufile}

	# ɾļ
	grep -v "${new_username}:" ${OLD_PSWD_FILE} >> ${OLD_PSWD_FILE}.bak
	mv ${OLD_PSWD_FILE}.bak ${OLD_PSWD_FILE}
	cp ${OLD_PSWD_FILE} ${RAMDISK}/admin/

	show_menu
	echo "### RMV SUCCESS!"
	echo ""
	user_list
}


main()
{
	show_menu

	while true
	do 
		echo -n "[Select]>>>"
		${READ} select || read_timeout

		show_menu

		case ${select} in
		1)
			show_admin_ip
			;;
		
		2)
			user_list
			;;

		3)
			edit_admin_ip
			;;

		4)
			edit_user
			;;

		5)
			add_user
			;;
	
		6)
			rmv_user
			;;
		
		"e")
			echo "--------------Exit-------------"
			echo "Exit success! "
			echo "ENTER '$0' into again !"
			echo "-------------------------------"
			exit 0
			;;

		*)
			echo "-------------ERROR----------------"
			echo "UNknow action.select [1-7] or 'e'"
			echo "Error count: $err_count times"
			echo "----------------------------------"
			err_count=$(($err_count+1))
			;;
		esac
	done
}


main

