#!/bin/sh

if [ "${PALANG}" = "en" ]; then
	LANG_001="Set Error"			#ʧ
	LANG_002="Set_DHCP_Server"		#DHCP
	LANG_003="Set Success"			#óɹ
	LANG_004="Enable DHCP Server"	#·DHCP
	LANG_005="Success"				#ɹ
	LANG_006="Disable_DHCP_Server"	#·DHCP
	LANG_007="Enable_DHCP_Server"	#DHCP
	LANG_008="Disable_DHCP_Server"	#DHCP
	LANG_009="Set_DHCP_Server"		#DHCP
	LANG_010="Error"				#ʧ
	LANG_011="Add_DHCP_Bind"		#DHCP̬
	LANG_012="Edit_DHCP_Bind"		#༭DHCP̬
	LANG_013="Delete_DHCP_Bind"		#ɾDHCP̬
	LANG_014="Delete_Num"			#ɾ
	LANG_015="Delete_DHCP_Bind"		#ɾDHCP̬
	LANG_016="Import_DHCP_Bind"		#DHCP̬
	LANG_017="-"
	LANG_018="Import_Success"		#ɹ
	LANG_019="Import_Error"			#ʧ
	LANG_020="Import_Done."			#
	LANG_021="Force_DHCP_user_offline"	#ǿDHCPû
fi

. ../common/ajax_common


set_dhcpsvr()
{
	enable=0
	[ "${CGI_dhcp_enable}" = "on" ] && enable=1
	
	cmdargs="name=${CGI_name} id=${CGI_id} dhcp_pool=${CGI_dhcp_pool}" 
	cmdargs="${cmdargs} dns0=${CGI_dns0} dns1=${CGI_dns1}"
	cmdargs="${cmdargs} leasettl=${CGI_leasettl} dhcp_enable=${enable}"

	if [ "${CGI_dhcp_gateway}" != "" -a "${CGI_dhcp_gateway}" != "0.0.0.0" ]; then
		cmdargs="${cmdargs} dhcp_gateway=${CGI_dhcp_gateway}"
	fi

	if [ "${CGI_dhcp_vlan}" != "" ]; then
		cmdargs="${cmdargs} dhcp_vlan=${CGI_dhcp_vlan}"
	else
		cmdargs="${cmdargs} dhcp_vlan=0"
	fi

	dhcpmask="${CGI_dhcp_mask}"
	[ "${dhcpmask}" = "" ] && dhcpmask="0.0.0.0"
	cmdargs="${cmdargs} dhcp_mask=${dhcpmask}"

	[ "${CGI_dhcp_acaddr}" = "" ] && CGI_dhcp_acaddr="0.0.0.0"
	cmdargs="${cmdargs} dhcp_acaddr=${CGI_dhcp_acaddr}"

	errmsg=`${FLOWEYE} nat setrtif ${cmdargs}`

	if [ "$?" != "0" ]; then
		retjson 1 "${LANG_001:=ʧ}${errmsg}"
	else
		sync_floweye "nat setrtif ${cmdargs}"
		WEB_LOGGER "${LANG_002:=DHCP}" "name=${CGI_name},enable=${enable}"
		retjson 0 "${LANG_003:=óɹ}"
	fi
}


list_dhcpsvr()
{
	${FLOWEYE} dhcpsvr list | grep "${CGI_keyword}" | awk -v state="${CGI_state}" \
	'BEGIN{
		dot = "";
		printf "[";
	}{
		if( state != "" && state != $5 ) next;

		col = 1;
		printf "%s", dot;
		printf "{";
		printf "\"id\":\"%s\",", $(col++);
		printf "\"num\":\"%s\",", NR;
		printf "\"name\":\"%s\",", $(col++);
		printf "\"ttl\":\"%s\",", $(col++);
		printf "\"vlan\":\"%s\",", $(col++);
		printf "\"enable\":\"%s\",", $(col++);
		printf "\"pool\":\"%s\",", $(col++);
		printf "\"dns0\":\"%s\",", $(col++);
		printf "\"dns1\":\"%s\",", $(col++);
		printf "\"gateway\":\"%s\",", $(col++);
		printf "\"clntcnt\":\"%s\"", $(col++);
		printf "}";
		if( dot == "" ) dot = ",";
	}END{
		printf "]";
	}'
}


enable_dhcpsvr()
{
	errmsg=`${FLOWEYE} nat setrtif name=${CGI_name} dhcp_enable=1`
	
	if [ $? -ne 0 ]; then
		retjson 1 "${errmsg}"
	else
		sync_floweye "nat setrtif name=${CGI_name} dhcp_enable=1"
		WEB_LOGGER "${LANG_004:=·DHCP}" "name=${CGI_name}"
		retjson 0 "${LANG_005:=ɹ}"
	fi
}


disable_dhcpsvr()
{
	errmsg=`${FLOWEYE} nat setrtif name=${CGI_name} dhcp_enable=0`
	
	if [ $? -ne 0 ]; then
		retjson 1 "${errmsg}"
	else
		sync_floweye "nat setrtif name=${CGI_name} dhcp_enable=0"
		WEB_LOGGER "${LANG_006:=·DHCP}" "name=${CGI_name}"
		retjson 0 "${LANG_005:=ɹ}"
	fi
}


btn_enable_dhcpsvr()
{
	num=0

	for name in ${CGI_names}
	do
		${FLOWEYE} nat setrtif name=${name} dhcp_enable=1
		sync_floweye "nat setrtif name=${name} dhcp_enable=1"
		num=$((${num}+1))
	done

	WEB_LOGGER "${LANG_007:=DHCP}" "num=${num}"
	retjson 0 "${LANG_005:=ɹ}"
}


btn_disable_dhcpsvr()
{
	num=0

	for name in ${CGI_names}
	do
		${FLOWEYE} nat setrtif name=${name} dhcp_enable=0
		sync_floweye "nat setrtif name=${name} dhcp_enable=0"
		num=$((${num}+1))
	done

	WEB_LOGGER "${LANG_008:=DHCP}" "num=${num}"
	retjson 0 "${LANG_005:=ɹ}"
}


set_dhcpsvr_stat()
{
	errmsg=`${FLOWEYE} dhcpsvr config ipmac_enable=${CGI_ipmac_enable}`

	if [ $? -ne 0 ]; then
		retjson 1 "${errmsg}"
	else
		sync_floweye "dhcpsvr config ipmac_enable=${CGI_ipmac_enable}"
		WEB_LOGGER "${LANG_009:=DHCP}" "ipmac_enable=${CGI_ipmac_enable}"
		retjson 0 "${LANG_005:=ɹ}"
	fi
}


load_dhcpsvr_stat()
{
	${FLOWEYE} dhcpsvr stat | awk -F "=" \
	'BEGIN{
		dot = "";
		printf "{";
	}{
		printf "%s\"%s\":\"%s\"", dot, $1, $2;
		if (dot == "") dot = ",";
	}END{
		printf "}";
	}'
}


list_dhcpsta()
{
	${FLOWEYE} dhcpsta list | grep "${CGI_keyword}" | awk \
	'BEGIN{
		dot = "";
		printf "[";
	}{
		desc = $5 == "NULL" ? "" : $5;
		col = 1;
		printf "%s", dot;
		printf "{";
		printf "\"mac\":\"%s\",", $(col++);
		printf "\"vlan\":\"%s\",", $(col++);
		printf "\"ip\":\"%s\",", $(col++);
		printf "\"ipn\":\"%s\",", $(col++);
		printf "\"desc\":\"%s\"", desc;
		printf "}";
		if( dot == "" ) dot = ",";
	}END{
		printf "]";
	}'
}


add_dhcpsta()
{
	[ "${CGI_vlan}" = "" ] && CGI_vlan="0-4095"
	[ "${CGI_desc}" != "" -a "${PALANG}" = "en" ] && CGI_desc=`echo ${CGI_desc} | sed -r 's/ /\%20/g'`

	errmsg=`${FLOWEYE} dhcpsta add mac=${CGI_mac} ip=${CGI_ip} vlan=${CGI_vlan} desc=${CGI_desc}`

	if [ "$?" != "0" ]; then
		retjson 1 "${LANG_010:=ʧ}${errmsg}"
	else
		sync_floweye "dhcpsta add mac=${CGI_mac} ip=${CGI_ip} vlan=${CGI_vlan} desc=${CGI_desc}"
		WEB_LOGGER "${LANG_011:=DHCP̬}" "mac=${CGI_mac} ip=${CGI_ip} vlan=${CGI_vlan} desc=${CGI_desc}"
		retjson 0 "${LANG_005:=ɹ}"
	fi
}


edit_dhcpsta()
{
	[ "${CGI_vlan}" = "" ] && CGI_vlan="0-4095"
	[ "${CGI_desc}" != "" -a "${PALANG}" = "en" ] && CGI_desc=`echo ${CGI_desc} | sed -r 's/ /\%20/g'`

	errmsg=`${FLOWEYE} dhcpsta set mac=${CGI_mac} ip=${CGI_ip} vlan=${CGI_vlan} desc=${CGI_desc}`

	if [ "$?" != "0" ]; then
		retjson 1 "${LANG_010:=ʧ}${errmsg}"
	else
		sync_floweye "dhcpsta set mac=${CGI_mac} ip=${CGI_ip} vlan=${CGI_vlan} desc=${CGI_desc}"
		WEB_LOGGER "${LANG_012:=༭DHCP̬}" "mac=${CGI_mac} ip=${CGI_ip} vlan=${CGI_vlan} desc=${CGI_desc}"
		retjson 0 "${LANG_005:=ɹ}"
	fi
}


delete_dhcpsta()
{
	errmsg=`${FLOWEYE} dhcpsta remove ${CGI_macs}`
	
	if [ "$?" != "0" ]; then
		retjson 1 "${LANG_010:=ʧ}${errmsg}"
	else
		sync_floweye "dhcpsta remove ${CGI_macs}"
		if [ "${CGI_num}" != "" ]; then
			WEB_LOGGER "${LANG_013:=ɾDHCP̬}" "${LANG_014:=ɾ}=${CGI_num}"
		else
			WEB_LOGGER "${LANG_015:=ɾDHCP̬}" "mac=${CGI_macs}"
		fi
		retjson 0 "${LANG_005:=ɹ}"
	fi
}


export_dhcpsta()
{
	file_name="dhcpsta.conf"
	file_path="${WEB_DOWNLOAD}/${file_name}"
	
	mkdir -p ${WEB_DOWNLOAD}
	
	${FLOWEYE} dhcpsta list | awk -v file=${file_path} \
	'{
		printf "%s %s %s  %s\n", $1, $2, $3, $5 > file;
	}'

	retjson 0 "OK" "{\"file_name\":\"${file_name}\"}"
}


import_dhcpsta()
{
	err=0
	ok=0

	[ ! -f "${CGI_file}" ] && retjson 1 "INV_FILE"

    ttfile="${TMPDIR}/`date +%s`.$$"
    cat ${CGI_file} | tr -ds '\r' '' > ${ttfile}

	while read mac vlan ip desc
	do
		cmdargs="mac=${mac} vlan=${vlan} ip=${ip} desc=${desc}"
		errmsg=`${FLOWEYE} dhcpsta add ${cmdargs}`

		if [ $? -ne 0 ]; then
			err=$((${err}+1))
		else
			ok=$((${ok}+1))
		fi
	done << EOF
`cat "${ttfile}"`
EOF

    rm -rf "${CGI_file}"
    rm -rf "${ttfile}"

	WEB_DOWNLOAD "${LANG_016:=DHCP̬}" "${LANG_018:=ɹ}${ok}${LANG_019:=ʧ}${err}"
	retjson 0 "${LANG_020:=}${LANG_018:=ɹ}${ok}${LANG_019:=ʧ}${err}"
}


list_dhcpuser()
{
	[ "${CGI_id}" != "" ] && cmdargs="id=${CGI_id}"

	${FLOWEYE} dhcplease list ${cmdargs} | grep -i "${CGI_keyword}" | awk \
	'BEGIN{
		dot = "";
		printf "[";
	}{
		col = 1;
		printf "%s", dot;
		printf "{";
		printf "\"lanif\":\"%s\",", $(col++);
		printf "\"mac\":\"%s\",", $(col++);
		printf "\"ip\":\"%s\",", $(col++);
		printf "\"uip\":\"%s\",", $(col++);
		printf "\"desc\":\"%s\",", $(col++);
		printf "\"vlan\":\"%s\",", $(col++);
		printf "\"state\":\"%s\",", $(col++);
		printf "\"type\":\"%s\",", $(col++);
		printf "\"ltime\":\"%s\",", $(col++);
		printf "\"ttl\":\"%s\"", $(col++);
		printf "}";
		if( dot == "" ) dot = ",";
	}END{
		printf "]";
	}'
}


rmv_dhcpuser()
{
	errmsg=`${FLOWEYE} dhcplease remove mac=${CGI_mac}`

	if [ "$?" != "0" ]; then
		retjson 1 "${LANG_010:=ʧ}${errmsg}"
	else
		sync_floweye "dhcplease remove mac=${CGI_mac}"
		WEB_LOGGER "${LANG_021:=ǿDHCPû}" "mac=${CGI_mac}"
		retjson 0 "${LANG_005:=ɹ}"
	fi
}


case "${CGI_action}" in
	"set_dhcpsvr")
		action_check
		set_dhcpsvr
		;;
	
	"list_dhcpsvr")
		retjson 0 "OK" "`list_dhcpsvr`"
		;;
		
	"enable_dhcpsvr")
		action_check
		enable_dhcpsvr
		;;

	"disable_dhcpsvr")
		action_check
		disable_dhcpsvr
		;;
	
	"btn_enable_dhcpsvr")
		action_check
		btn_enable_dhcpsvr
		;;

	"btn_disable_dhcpsvr")
		action_check
		btn_disable_dhcpsvr
		;;
		
	"set_dhcpsvr_stat")
		action_check
		set_dhcpsvr_stat
		;;
		
	"load_dhcpsvr_stat")
		retjson 0 "OK" "`load_dhcpsvr_stat`"
		;;

	"list_dhcpsta")
		retjson 0 "OK" "`list_dhcpsta`"
		;;
	
	"add_dhcpsta")
		action_check
		add_dhcpsta
		;;

	"edit_dhcpsta")
		action_check
		edit_dhcpsta
		;;

	"delete_dhcpsta")
		action_check
		delete_dhcpsta
		;;

	"export_dhcpsta")
		action_check
		export_dhcpsta
		;;

	"import_dhcpsta")
		action_check
		import_dhcpsta
		;;

	"list_dhcpuser")
		retjson 0 "OK" "`list_dhcpuser`"
		;;

	"rmv_dhcpuser")
		action_check
		rmv_dhcpuser
		;;

	*)
		retjson 1 "UNKNOW_ACTION"
		;;
esac
