#!/bin/sh

. ../common/ajax_common

DNSCONF="/etc/resolv.conf"
TZPATH="/conf/zoneinfo"
TZCONF="${TZPATH}/default_timezone.conf"

CPATH="${PGETC}/App/systemgd"
WEBACL="${CPATH}/webacl.conf"

if [ "${PALANG}" = "en" ]; then
	LANG001="Error"		#ʧ
	LANG002="Success"	#ɹ
fi


load_httpd_conf()
{
	port=443
	read_timeout=60

	[ -f "${PGETC}/httpd.conf" ] && . ${PGETC}/httpd.conf
	[ "${HTTPS_PORT}" != "" ] && port=${HTTPS_PORT}

	printf "{"
	printf "\"port\":\"${port}\","
	printf "\"read_timeout\":\"${read_timeout}\""
	printf "}"
}


load_webacl()
{
	webexit=1800
	verifyCode=0
	maxErr=0
	lockTime=30
	pswdTTL=0
	pswdLEN=8
	number=""
	bword=""
	sword=""
	other=""

	[ -f "${WEBACL}" ] && . "${WEBACL}"
	[ -f "${PGETC}/webexit.conf" ] && . ${PGETC}/webexit.conf

	webexit=$((${webexit}/60))
	lockTime=$((${lockTime}/60))
	pswdTTL=$((${pswdTTL}/24/60/60))
	
	printf "{"

	printf "\"webexit\":\"${webexit}\","
	printf "\"verifyCode\":${verifyCode},"
	printf "\"maxErr\":${maxErr},"
	printf "\"lockTime\":${lockTime},"
	printf "\"pswdLEN\":${pswdLEN},"
	printf "\"pswdTTL\":${pswdTTL},"
	printf "\"number\":\"${number}\","
	printf "\"bword\":\"${bword}\","
	printf "\"sword\":\"${sword}\","
	printf "\"other\":\"${other}\""
	printf "}"
}


load_ifadmin()
{
	tag=1
	dns1="0.0.0.0"
	dns2="0.0.0.0"
	
	. ${PGETC}/ifadmin.conf
	
	[ ! -f ${DNSCONF} ] && touch ${DNSCONF}
	for ip in `cat ${DNSCONF} | grep ^nameserver | cut -d" " -f2`
	do
		eval dns${tag}=${ip}
		tag=$(($tag+1))
	done

	[ "${dns1}" = "" ] && dns1="0.0.0.0"
	[ "${dns2}" = "" ] && dns2="0.0.0.0"

	if [ "`uname`" = "Linux" ]; then
		mac=`ifconfig ${ADMIN_PORT} | grep HWaddr | awk '{print $NF}'`
	else
		mac=`ifconfig ${ADMIN_PORT} | grep ether | awk '{print $NF}'`
	fi

	printf "{"
	printf "\"mgif\":\"${ADMIN_PORT}\","
	printf "\"ip\":\"${ADMIN_IP}\","
	printf "\"mac\":\"${mac}\","
	printf "\"mask\":\"${ADMIN_MASK}\","
	printf "\"gateway\":\"${GATEWAY}\","
	printf "\"dns1\":\"${dns1}\","
	printf "\"dns2\":\"${dns2}\""
	printf "}"
}


load_time()
{
	ntpsvr="0.0.0.0"
	default_tz="Asia"
	default_bcy="Shanghai"
	default_xcy=""

	if [ -f ${PGETC}/ntp.conf ]; then
		. ${PGETC}/ntp.conf
		ntpsvr="${ntpserver_ip}"
	fi
	
	[ -f ${TZCONF} ] && . ${TZCONF}
	
	systime=`date +"%Y-%m-%d %H:%M:%S"`
	
	printf "{"
	printf "\"ntp\":\"${ntpsvr}\","
	printf "\"time\":\"${systime}\","
	printf "\"old_timezone\":\"${default_tz}\","
	printf "\"old_city1\":\"${default_bcy}\","
	printf "\"old_city2\":\"${default_xcy}\","
	printf "\"timezone\":\"${default_tz}\","
	printf "\"city1\":\"${default_bcy}\","
	printf "\"city2\":\"${default_xcy}\""
	printf "}"
}


load_sysname()
{
	SYSNAME="Panabit"
	
	[ -f "${PGETC}/sysname.conf" ] && . "${PGETC}/sysname.conf"
	
	printf "{"
	printf "\"webexit\":\"${webexit}\","
	printf "\"curuser\":\"${PANABIT_USER}\","
	printf "\"moreadmin\":\"${DEFAULT_ADMIN}\","
	printf "\"sysname\":\"${SYSNAME}\""
	printf "}"
}



load_sys_conf()
{
	printf "{"
	printf "\"httpd\":`load_httpd_conf`,"
	printf "\"ifadmin\":`load_ifadmin`,"
	printf "\"systime\":`load_time`,"
	printf "\"webacl\":`load_webacl`,"
	printf "\"sysname\":`load_sysname`"
	printf "}"
}


set_ifadmin()
{
	echo "ADMIN_IP=${CGI_ip}" > ${PGETC}/ifadmin.conf
	echo "ADMIN_MASK=${CGI_mask}" >> ${PGETC}/ifadmin.conf
	echo "GATEWAY=${CGI_gateway}" >> ${PGETC}/ifadmin.conf
	
	echo "nameserver ${CGI_dns1}" > ${DNSCONF}
	echo "nameserver ${CGI_dns2}" >> ${DNSCONF}

	sync
	sync

	/usr/ramdisk/bin/ipectrl start network >/dev/null 2>&1 &

	if [ $? -ne 0 ]; then
		retjson 1 "${LANG001:=ʧ}"
	else
		WEB_LOGGER "޸Ĺӿ" "ip=${CGI_ip}"
		retjson 0 "${LANG002:=ɹ}"
	fi
}


set_systime()
{
	[ "${CGI_ntp}" = "" ] && CGI_ntp="0.0.0.0"
	echo "ntpserver_ip=${CGI_ntp}" > ${PGETC}/ntp.conf
	[ "${CGI_ntp}" != "0.0.0.0" ] && ntpdate -t 4 ${CGI_ntp} >/dev/null 2>&1 &

	osver=`uname`
	timefmt=`echo "${CGI_time}" | awk -v os=${osver} '{
		split($1, arg1, "-");
		split($2, arg2, ":");

		if(os=="Linux")
			printf "-s %s", $0;
		else
			printf arg1[1]arg1[2]arg1[3]arg2[1]arg2[2]"."arg2[3];
	}'`

	date "${timefmt}"
	WEB_LOGGER "޸ϵͳʱ"

	#set timezone
	if [ "${CGI_old_timezone}" != "${CGI_timezone}" -o "${CGI_old_city1}" != "${CGI_city1}" -o "${CGI_old_city2}" != "${CGI_city2}" ]; then
		zonefile="${TZPATH}/${CGI_timezone}/${CGI_city1}"
		[ "${CGI_city2}" != "" ] && zonefile="${zonefile}/${CGI_city2}"

		if [ ! -f ${zonefile} ]; then
			retjson 1 "δҵʱļʱʧ"
		fi

		cp ${zonefile} /etc/localtime
		adjkerntz -a

		. /etc/PG.conf
		offset=`date +%z`
		jsmsg="Highcharts.setOptions({global: {timezoneOffset: ('${offset}' / -100) * 60}});"
		echo "${jsmsg}" > ${PGPATH}/admin/img/global_timezone.js
		echo "${jsmsg}" > /usr/ramdisk/admin/img/global_timezone.js
		echo "${jsmsg}" > ${TZPATH}/global_timezone.js

		echo "default_tz=${CGI_timezone}" > ${TZCONF}
		echo "default_bcy=${CGI_city1}" >> ${TZCONF}
		echo "default_xcy=${CGI_city2}" >> ${TZCONF}

		WEB_LOGGER "޸ϵͳʱ"
	fi

	retjson 0 "${LANG002:=ɹ}"
}


set_web_access()
{
	pswdTTL=0
	pswdLEN=8
	number=""
	bword=""
	sword=""
	other=""

	mkdir -p ${CPATH}
	[ -f ${WEBACL} ] && . ${WEBACL}

	CGI_webexit=$((${CGI_webexit}*60))
	CGI_lockTime=$((${CGI_lockTime}*60))
	
	echo "webexit=${CGI_webexit}" >	${PGETC}/webexit.conf
	/usr/ramdisk/bin/ipectrl stop monitor >/dev/null 2>&1
	/usr/ramdisk/bin/ipectrl start monitor >/dev/null 2>&1

	echo "verifyCode=${CGI_verifyCode}"	> ${WEBACL}
	echo "maxErr=${CGI_maxErr}"			>> ${WEBACL}
	echo "lockTime=${CGI_lockTime}"		>> ${WEBACL}
	echo "pswdTTL=${pswdTTL}"			>> ${WEBACL}
	echo "pswdLEN=${pswdLEN}"			>> ${WEBACL}
	echo "number=${number}"				>> ${WEBACL}
	echo "bword=${bword}"				>> ${WEBACL}
	echo "sword=${sword}"				>> ${WEBACL}
	echo "other=${other}"				>> ${WEBACL}

	WEB_LOGGER "ϵͳwebʹ"
	retjson 0 "${LANG002:=ɹ}"
}


set_sysname()
{
	echo "SYSNAME=${CGI_sysname}" > ${PGETC}/sysname.conf
	echo "SYSNAME=${CGI_ut8name}" > ${PGETC}/sysname_utf8.conf
	echo "${CGI_sysname}" > /usr/ramdisk/etc/sysname.inf

	WEB_LOGGER "ϵͳ" "name=${CGI_sysname}"
	retjson 0 "${LANG002:=ɹ}"
}


set_power()
{
	# Stop datamon and save data.
	# Wait for datamon to exit.
	exited=0
	for loop in 1 2; do
		# stop datamon
		errmsg=`/usr/ramdisk/bin/ipectrl stop datamon`
		# wait datamon to exit
		count=20
		while [ ${count} -gt 0 ]; do
			sleep .5
			datamon=`ps ax | grep ipe_datamon | grep -v grep`
			if [ "${datamon}" = "" ]; then
				exited=1
				break
			fi
			count=$((${count} - 1))
		done

		[ ${exited} -eq 1 ] && break
	done

	sync
	sync

	print_json_head

	case "${CGI_type}" in
		"reboot")
			WEB_LOGGER "ֶ豸"
			reboot
			;;

		"shutdown")
			WEB_LOGGER "ֶر豸"
			if [ "`uname`" = "Linux" ]; then
				shutdown -h now
			else
				shutdown -p now
			fi
			;;
	esac
}


set_httpd()
{
	port=443
	read_timeout=60
	HTTPD_CONF="${PGETC}/httpd.conf"
	[  -f ${HTTPD_CONF} ] && . ${HTTPD_CONF}

	if [ "${CGI_port}" != "${port}" -o "${CGI_port}" != "${HTTPS_PORT}" ]; then
		grep -v "^port=" ${HTTPD_CONF} > ${HTTPD_CONF}.bak
		echo "port=${CGI_port}" >> ${HTTPD_CONF}.bak
		mv ${HTTPD_CONF}.bak ${HTTPD_CONF}

		grep -v "^HTTPS_PORT=" /etc/PG.conf > /etc/PG.conf.bak
		mv /etc/PG.conf.bak /etc/PG.conf
		cp /etc/PG.conf /usr/ramdisk/

		WEB_LOGGER "޸HTTPD˿" "oldport=${CGI_old_port} port=${CGI_port}"
	fi

	if [ "${read_timeout}" != "${CGI_read_timeout}" ]; then
		grep -v "^read_timeout=" ${HTTPD_CONF} >  ${HTTPD_CONF}.bak
		echo "read_timeout=${CGI_read_timeout}" >> ${HTTPD_CONF}.bak
		mv ${HTTPD_CONF}.bak ${HTTPD_CONF}
		WEB_LOGGER "޸HTTPDȡʱʱ" "read_timeout=${CGI_read_timeout}"
	fi

	retjson 0 "${LANG002:=ɹ}"
}


restart_httpd()
{
	sleep 1
	/usr/ramdisk/bin/ipectrl stop monitor >/dev/null 2>&1
	/usr/ramdisk/bin/ipectrl start monitor >/dev/null 2>&1
	killall ipe_httpd
	retjson 0 "OK"
}


case "${CGI_action}" in
	"load_sys_conf")
		retjson 0 "OK" "`load_sys_conf`"
		;;

	"load_webacl")
		retjson 0 "OK" "`load_webacl`"
		;;

	"load_user")
		data=`load_user`
		retjson 0 "OK" ${data}
		;;

	"set_sysname")
		action_check
		set_sysname
		;;

	"set_ifadmin")
		action_check
		set_ifadmin
		;;

	"set_systime")
		action_check
		set_systime
		;;

	"set_web_access")
		action_check
		set_web_access
		;;

	"set_httpd")
		action_check
		set_httpd
		;;

	"set_power")
		admin_check
		set_power
		;;

	"restart_httpd")
		action_check
		restart_httpd
		;;

	*)
		retjson 1 "UNKNOW_ACTION"
		;;
esac
