#!/bin/sh

. ../common/ajax_common


if [ "${PALANG}" = "en" ]; then
	LANG_001="There is a VPN line on the line, please delete the VPN line first!"	#·VPN·ɾVPN·!
	LANG_002="Error"	#ʧ
	LANG_003="Total"	#ܹ
	LANG_004="It is possible that the line is in use and cannot be deleted."	#·ʹУ޷ɾ
	LANG_005="Success"	#ɹ
	LANG_006="Set_Virtual_Interface"	#༭·
	LANG_007="Add_Virtual_Interface"	#·
	LANG_008="Set_PPPOE_SERVER"			#PPPOE
	LANG_009="Add_LAN"					#LAN·
	LANG_010="num"	#
	LANG_011="."	#
	LANG_012="fail"	#ʧ
	LANG_013="ok"	#ɹ
	LANG_014="Add_Static_Interface"			#Ӿ̬IP·
	LANG_015="Add_DHCP_Interface"			#DHCP·
	LANG_016="INV_FILE"						#ѡPPPOE˺ļ
	LANG_017="ADD_PPPOE_Interface"			#PPPOE·
	LANG_018="Delete_Virtual_Interface"		#ɾ·
	LANG_019="Reload_Virtual_Interface"		#ֶز·
	LANG_020="Enable_Virtual_Interface"		#·
	LANG_021="Disable_Virtual_Interface"	#·
	LANG_022="Enable_Virtual_Interface"		#·
	LANG_023="Disabe_Virtual_Interface"		#·
	LANG_024="Delete_Virtual_Interface"		#ɾ·
	LANG_025="Set_Virtual_Interface"		#༭·
	LANG_026="Import_Virtual_Interface"		#·
	LANG_027="Import Success"	#ɹ
	LANG_028="num"				#
fi


PROXY_DESC=${PGETC}/remark/remark_list.conf


desc_list()
{
	if [ ! -f "${PROXY_DESC}" ]; then
		printf "{}"
		return
	fi

	awk \
	'BEGIN{
		dot = "";
		printf "{";
	}{
		printf "%s\"%s\":\"%s\"", dot, $1, $2;
		if(dot == "") dot = ",";
	}END{
		printf "}";
	}' ${PROXY_DESC}
}


proxy_list()
{
	printf  "{"
	printf "\"proxy\":[`${FLOWEYE} nat listproxy type=${CGI_type} onlystat=1 json=1 group=${CGI_group}`]"
	printf ",\"desc\":`desc_list`"
	printf "}"
}


list_nat_ippool()
{
	[ "${CGI_proxy}" = "" ] && retjson 1 "NO_PROXY"

	${FLOWEYE} nat getproxy name=${CGI_proxy} getnatpool=1 | awk \
	'BEGIN{
		dot="";
		printf "[";
	}{
        if (group != "" && $4 != group) next;
    
		printf "%s{", dot;
		printf "\"ip\":\"%s\",", $1;
		printf "\"dead\":\"%s\",", $2;
		printf "\"hits\":%d,", $3;
		printf "\"delay\":\"%s\"", $4;
		printf "}";
		if(dot == "") dot=","
	}END{
		printf "]";
	}'
}


get_proxy_info()
{	
	if [ "${CGI_name}" != "" ]; then
		pxy_name="${CGI_name}"
		CGI_id="${CGI_name}"
	else
		pxy_name="`${FLOWEYE} nat getproxy ${CGI_id} | grep "^name=" | cut -d"=" -f2`"
	fi
	
	desc="`awk -v name="${pxy_name}" '{if($1 == name) print $2}' ${PROXY_DESC}`"
	desc="`echo ${desc} | sed -r 's/\%20/ /g'`"

	printf "{"
	printf "\"desc\":\"${desc}\""

	${FLOWEYE} nat getproxy ${CGI_id} | awk -F"=" \
	'{
		printf ",\"%s\":\"%s\"", $1, $2;
	}'
	
	printf "}"
}


load_addproxy_env()
{
	. ../common/ajax_object_lib

	printf "{"
	printf "\"wan\":`lib_proxy_list proxy.pppoe.dhcp`"
	printf ",\"lan\":`lib_proxy_list lan`"
    printf ",\"ippool_list\":`lib_ippool_list`"
    printf ",\"interface_list\":`lib_interface_list`"
	printf ",\"radius_list\":`lib_radsvr_list`"

	if [ "${CGI_id}" != "" ]; then
		printf ",\"proxy\":`get_proxy_info`"
	fi

	printf "}"
}


proxy_add()
{
	ping_disable=0

	[ "${CGI_newname}" = "" ] && retjson 1 "INV_NAME"

	if [ "${CGI_mtu}" = "" ]; then
		[ "${CGI_type}" = "pppoe" ] && CGI_mtu=1460
		[ "${CGI_type}" = "l2tpwan" -o "${CGI_type}" = "iwan" ] && CGI_mtu=1420
	fi

	if [ "${CGI_action}" = "proxy_edit" ]; then
		action="set"
		LOGMSG="${LANG_006:=༭·}"
		RETMSG="${LANG_005:=ɹ}"
		cmdargs="name=${CGI_name} newname=${CGI_newname} ifname=${CGI_ifname}"
	else
		action="add"
		LOGMSG="${LANG_007:=·}"
		RETMSG="${LANG_005:=ɹ}"
		cmdargs="name=${CGI_newname} ifname=${CGI_ifname}"
	fi

	[ "${CGI_vlan}"     = "" ] && CGI_vlan="0"
	[ "${CGI_vlan1}"    = "" ] && CGI_vlan1="0"
	[ "${CGI_pingip}"   = "" ] && CGI_pingip="0.0.0.0"
	[ "${CGI_pingip2}"  = "" ] && CGI_pingip2="0.0.0.0"
	[ "${CGI_clonemac}" = "" ] && CGI_clonemac="00:00:00:00:00:00"
	[ "${CGI_ping_disable}" = "on" ] && ping_disable=1

	cmdargs="${cmdargs} mtu=${CGI_mtu} ping_disable=${ping_disable} pingip=${CGI_pingip} pingip2=${CGI_pingip2}"

	case "${CGI_type}" in
	"rtif")
		standby="NULL"
		[ "${CGI_mode}" = "standby" ] && standby="${CGI_standby}" 
		cmdargs="${cmdargs} vlan=${CGI_vlan} mtu=${CGI_mtu} clonemac=${CGI_clonemac} standby=${standby}"
		cmdargs="nat ${action}rtif ${cmdargs} addr=${CGI_addr} mask=${CGI_netmask}"
		;;

	"rtif6")
		cmdargs="${cmdargs} vlan=${CGI_vlan} mtu=${CGI_mtu} clonemac=${CGI_clonemac}"
		cmdargs="nat ${action}rtif6 ${cmdargs} addr=${CGI_addr} mask=${CGI_netmask} ${cmdargs}"
		;;

	"vrif")
		[ "${CGI_vrrp_preempt}" = "on" ] && preempt=1 || preempt=0
		cmdargs="${cmdargs} vlan=${CGI_vlan} mtu=${CGI_mtu}"
		cmdargs="nat ${action}vrif ${cmdargs} addr=${CGI_addr} mask=${CGI_netmask} priority=${CGI_vrrp_priority} preempt=${preempt} vrid=${CGI_vrrp_vrid}"
		;;

	"proxy6")
		cmdargs="nat ${action}proxy6 ${cmdargs} addr=${CGI_addr} gateway=${CGI_gateway} vlan=${CGI_vlan} vlan1=${CGI_vlan1}"
		[ "${CGI_dnsaddr}" != "" ] && cmdargs="${cmdargs} ${CGI_dnsaddr}"
		;;

	"proxy")
		[ "${CGI_natip}" = "" ] && CGI_natip="0.0.0.0"

		cmdargs="nat ${action}proxy ${cmdargs} addr=${CGI_addr} gateway=${CGI_gateway}"
		cmdargs="${cmdargs} dns=${CGI_dnsaddr} vlan=${CGI_vlan} vlan1=${CGI_vlan1} clonemac=${CGI_clonemac}"
		cmdargs="${cmdargs} natip=${CGI_natip} gwpxy=${CGI_gwpxy}"
		;;

	"dhcpwan")
		cmdargs="nat ${action}dhcpwan ${cmdargs} vlan=${CGI_vlan} vlan1=${CGI_vlan1} clonemac=${CGI_clonemac}"
		;;

	"pppoe")
		[ "${CGI_waitime}" = "" ] && CGI_waitime=5
		[ "${CGI_acname}"  = "" ] && CGI_acname="NULL"
		[ "${CGI_svcname}" = "" ] && CGI_svcname="NULL"

		cmdargs="nat ${action}pppoe ${cmdargs} username=${CGI_username} password=${CGI_password} waitime=${CGI_waitime}"
		cmdargs="${cmdargs} vlan=${CGI_vlan} vlan1=${CGI_vlan1} clonemac=${CGI_clonemac} acname=${CGI_acname} svcname=${CGI_svcname}"
		;;

	"l2tpwan")
		[ "${CGI_svrport}" = "" ] && CGI_svrport="1701"
		[ "${CGI_waitime}" = "" ] && CGI_waitime=5
		cmdargs="nat ${action}l2tpwan ${cmdargs} svraddr=${CGI_svraddr} svrport=${CGI_svrport}"
		cmdargs="${cmdargs} username=${CGI_username} password=${CGI_password} waitime=${CGI_waitime}"
		;;

	"iwan")
		[ "${CGI_cfgencrypt}" = "on" ] && cfgencrypt="1" || cfgencrypt="0"

		[ "${CGI_svrport}" = "" ] && CGI_svrport="8000"
		cmdargs="nat ${action}iwan ${cmdargs} svraddr=${CGI_svraddr} svrport=${CGI_svrport}"
		cmdargs="${cmdargs} username=${CGI_username} password=${CGI_password} encrypt=${cfgencrypt} srid=${CGI_srid}"
		;;

	"ipsecwan")
		[ "${CGI_my_id}" != "" ] && cmdargs="${cmdargs} my_id=${CGI_my_id}"
		[ "${CGI_peer_id}" != "" ] && cmdargs="${cmdargs} peer_id=${CGI_peer_id}"

		cmdargs="${cmdargs} peer_addr=${CGI_peer_addr} my_net=${CGI_my_net_start}-${CGI_my_net_end} ike_version=${CGI_ike_version}"
		cmdargs="${cmdargs} peer_net=${CGI_peer_net_start}-${CGI_peer_net_end} psk=${CGI_psk} ike_encr=${CGI_ike_encr}"
		cmdargs="${cmdargs} ike_prf=${CGI_ike_prf} ike_auth=${CGI_ike_auth} ike_dh=${CGI_ike_dh} dpd_freq=${CGI_dpd_freq}"
		cmdargs="nat ${action}ipsecwan ${cmdargs} esp_encr=${CGI_esp_encr} esp_auth=${CGI_esp_auth} role=${CGI_role}"

		if [ "${CGI_ike_version}" = "1" ]; then
			cmdargs="${cmdargs} ike_mode=${CGI_ike_mode} ike_live=${CGI_ike_live} esp_live=${CGI_esp_live}"
		fi
		;;

	"posvrif")
		LOGMSG="${LANG_008:=PPPOE}"
		[ "${CGI_action}" = "proxy_add" ] && action="addposvrif name=${CGI_newname}" || action="setposvrif name=${CGI_name} newname=${CGI_newname}"
		cmdargs="nat ${action} ifname=${CGI_ifname} addr=${CGI_addr}"
		cmdargs="${cmdargs} dns0=${CGI_dns0} dns1=${CGI_dns1} vlan=${CGI_vlan} mtu=${CGI_mtu}"
		cmdargs="${cmdargs} service=${CGI_service} auth=${CGI_auth} pool=${CGI_pool} maxclnt=${CGI_maxclnt}"
		cmdargs="${cmdargs} radsvr=${CGI_radsvrid} mactype=${CGI_mactype} macdelay=${CGI_macdelay}"
		;;

	*)
		retjson 1 "INV_TYPE"
		;;
	esac

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

	if [ "$?" != "0" ]; then
		retjson 1 "${LANG_002:=ʧ}:${errmsg}"
	else
		handle_pxy_desc
		sync_floweye "${cmdargs}"
		WEB_LOGGER "${LOGMSG}" "name=${CGI_newname}"
		retjson 0 "${RETMSG}"
	fi
}


handle_pxy_desc()
{
	if [ "${CGI_action}" = "proxy_edit" ]; then
		grep -v "${CGI_name} " ${PROXY_DESC} > ${PROXY_DESC}.bak
		mv ${PROXY_DESC}.bak ${PROXY_DESC}
	fi

	if [ "${CGI_desc}" != "" ]; then
		echo "${CGI_newname} ${CGI_desc}" >> ${PROXY_DESC}
	fi
}


proxy_addm()
{
	ping_disable=0
	[ "${CGI_ping_disable}" = "on" ] && ping_disable=1
	[ "${CGI_add_num}" = "" ] && CGI_add_num=0

	natcmd="pingip=${CGI_pingip} pingip2=${CGI_pingip2} ping_disable=${ping_disable}"

	init=0
	case "${CGI_type}" in
	"rtif")
		natcmd="nat addrtif netmask=${CGI_netmask} mtu=${CGI_mtu} ${natcmd}"

		addr1=`echo ${CGI_addr} | cut -d"." -f1`
		addr2=`echo ${CGI_addr} | cut -d"." -f2`
		addr3=`echo ${CGI_addr} | cut -d"." -f3`
		addr4=`echo ${CGI_addr} | cut -d"." -f4`
		src4=${addr4}

		while [ ${init} -lt ${CGI_add_num} ]
		do
			addrs="${addr1}.${addr2}.${addr3}.${addr4}"
			addr4=$((${addr4} + ${CGI_ipadd_num}))

			if [ ${addr4} -gt 254 ]; then 
				addr4=${src4}
				addr3=$((${addr3} + 1))
				if [ ${addr3} -gt 254 ]; then 
					addr3=1
					addr2=$(( ${addr2}+1 ))
				fi
			fi

			[ "${addrs}" = "${CGI_gateway}" ] && continue

			num=$((${init}+1))
			errmsg=`${FLOWEYE} ${natcmd} ifname=${CGI_ifname} name=${CGI_name}${num} addr=${addrs} vlan=${CGI_vlan}`

			[ $? -ne 0 ] && retjson 1 "${LANG_012:=ʧ}${errmsg}${LANG_013:=ɹ}${init}${LANG_011:=}"

			init=$((${init}+1))
			[ "${CGI_vlan_add}" = "on" ] && CGI_vlan=$((${CGI_vlan}+1))
		done
		WEB_LOGGER "${LANG_009:=LAN·}" "${LANG_010:=}=${init}${LANG_011:=}"
		;;

	"proxy")
		natcmd="nat addproxy gateway=${CGI_gateway} mtu=${CGI_mtu} gwpxy=${CGI_gwpxy} dns=${CGI_dnsaddr} ${natcmd}"

		addr1=`echo ${CGI_addr} | cut -d"." -f1`
		addr2=`echo ${CGI_addr} | cut -d"." -f2`
		addr3=`echo ${CGI_addr} | cut -d"." -f3`
		addr4=`echo ${CGI_addr} | cut -d"." -f4`

		while [ ${init} -lt ${CGI_add_num} ]
		do
			addrs="${addr1}.${addr2}.${addr3}.${addr4}"
			addr4=$((${addr4}+1))

			if [ ${addr4} -gt 254 ]; then 
				addr4=1
				addr3=$((${addr3}+1))
				if [ ${addr3} -gt 255 ]; then 
					addr3=1
					addr2=$(( ${addr2}+1 ))
				fi
			fi

			[ "${addrs}" = "${CGI_gateway}" ] && continue

			num=$((${init}+1))
			errmsg=`${FLOWEYE} ${natcmd} ifname=${CGI_ifname} name=${CGI_name}${num} addr=${addrs} vlan=${CGI_vlan} vlan1=${CGI_vlan1}`

			[ $? -ne 0 ] && retjson 1 "${LANG_012:=ʧ}${errmsg}${LANG_013:=ɹ}${init}${LANG_011:=}"

			init=$((${init}+1))
			[ "${CGI_vlan_add}" = "on" ] && CGI_vlan=$((${CGI_vlan}+1))
			[ "${CGI_vlan1_add}" = "on" ] && CGI_vlan1=$((${CGI_vlan1}+1))
		done
		WEB_LOGGER "LANG_014:=Ӿ̬IP·}" "${LANG_010:=}=${init}${LANG_011:=}"
		;;

	"dhcpwan")
		natcmd="nat adddhcpwan ${natcmd} mtu=${CGI_mtu}"

		while [ ${init} -lt ${CGI_add_num} ]
		do
			num=$((${init}+1))
			errmsg=`${FLOWEYE} ${natcmd} ifname=${CGI_ifname} name=${CGI_name}${num} vlan=${CGI_vlan} vlan1=${CGI_vlan1}`
			[ $? -ne 0 ] && retjson 1 "${LANG_012:=ʧ}${errmsg}${LANG_013:=ɹ}${init}${LANG_011:=}"
			init=$((${init}+1))
			[ "${CGI_vlan_add}" = "on" ] && CGI_vlan=$((${CGI_vlan}+1))
			[ "${CGI_vlan1_add}" = "on" ] && CGI_vlan1=$((${CGI_vlan1}+1))
		done
		WEB_LOGGER "${LANG_015:=DHCP·}" "${LANG_010:=}=${init}${LANG_011:=}"
		;;

	"pppoe")
		[ ! -f "${CGI_file}" ] && retjson 1 "${LANG_016:=ѡPPPOE˺ļ}"
		natcmd="nat addpppoe ${natcmd} mtu=${CGI_mtu}"

		while read acct pass f_if f_vlan
		do
			_vlan1="${CGI_vlan}"
			_vlan2="${CGI_vlan1}"
			_ifname="${CGI_ifname}"
			
			[ "${f_if}" != "" ] && _ifname="${f_if}"

			if [ "${f_vlan}" != "" ]; then
				is_qinq=`echo ${f_vlan} | grep "/"`
				if [ "${is_qinq}" != "" ]; then
					_vlan1="`echo ${f_vlan} | cut -d"/" -f1`"
					_vlan2="`echo ${f_vlan} | cut -d"/" -f2`"
				else
					_vlan1="${f_vlan}"
					_vlan2=0
				fi
			fi

			num=$((${init}+1))
			errmsg=`${FLOWEYE} ${natcmd} ifname=${_ifname} name=${CGI_name}${num} username=${acct} password=${pass} vlan=${_vlan1} vlan1=${_vlan2}`
			if [ $? -ne 0 ]; then
				rm ${CGI_file}
				 retjson 1 "${LANG_012:=ʧ}${errmsg}${LANG_013:=ɹ}${init}${LANG_011:=}"
			fi
			init=$((${init}+1))
			[ "${CGI_vlan_add}" = "on" ] && CGI_vlan=$((${CGI_vlan}+1))
			[ "${CGI_vlan1_add}" = "on" ] && CGI_vlan1=$((${CGI_vlan1}+1))
		done << EOF
`cat ${CGI_file} | tr -d "\r"`
EOF

		WEB_LOGGER "${LANG_017:=PPPOE·}" "${LANG_010:=}=${init}${LANG_011:=}"
		rm ${CGI_file}
		;;
	esac

	retjson 0 "${LANG_005:=ɹ}${LANG_010:=}=${init}${LANG_011:=}"
}


proxy_editm()
{
	row=0

	cmdargs="ifname=${CGI_ifname} dns=${CGI_dnsaddr} pingip=${CGI_pingip} pingip2=${CGI_pingip2}"
	
	for name in `echo ${CGI_names} | tr "," " "`
	do
		type=`${FLOWEYE} nat getproxy ${name} | grep "^type=" | cut -d"=" -f2`
		errmsg=`${FLOWEYE} nat set${type} name=${name} ${cmdargs}`

		[ $? -ne 0 ] && retjson 1 "${LANG_006:=༭·}->${name}${LANG_012:=ʧ}:${errmsg}"
		row=$((${row}+1))
	done

	WEB_LOGGER "${LANG_025:=༭·}" "${LANG_010:=}=${init}${LANG_011:=}"
	retjson 0 "${LANG_005:=ɹ}${LANG_010:=}=${init}${LANG_011:=}"
}


clear_dnsfail()
{
	init=0

	for pid in `${FLOWEYE} nat listproxy type=wan | cut -d" " -f2`
	do
		${FLOWEYE} nat config cleardns=${pid}
		init=$(($init+1))
	done

	retjson 0 "${LANG_005:=ɹ}${LANG_010:=}=${init}${LANG_011:=}"
}


proxy_remove()
{
	errmsg=`${FLOWEYE} nat rmvproxy ${CGI_id}`

	if [ "$?" != "0" ]; then
		if [ "${errmsg}" = "HAS_CHILDREN" ]; then
			retjson 1 "${LANG_001:=·VPN·ɾVPN·!}"
		else
			retjson 1 "${LANG_002:=ʧ}:${errmsg}"
		fi
	fi

	sync_floweye "nat rmvproxy ${CGI_id}"
	grep -v "${CGI_name} " ${PROXY_DESC} > ${PROXY_DESC}.bak
	mv ${PROXY_DESC}.bak ${PROXY_DESC}
	WEB_LOGGER "${LANG_018:=ɾ·}" "name=${CGI_name}"
	retjson 0 "${LANG_005:=ɹ}"
}


proxy_reload()
{
	errmsg=`${FLOWEYE} nat config redial=${CGI_id}`

	if [ "$?" != "0" ]; then
		retjson 1 "${LANG_002:=ʧ}:${errmsg}"
	fi

	WEB_LOGGER "${LANG_019:=ֶز·}" "name=${CGI_name}"
	retjson 0 "${LANG_005:=ɹ}"
}


proxy_enable()
{
	errmsg=`${FLOWEYE} nat config enableproxy=${CGI_id}`

	if [ "$?" != "0" ]; then
		retjson 1 "${LANG_002:=ʧ}:${errmsg}"
	else
		sync_floweye "nat config enableproxy=${CGI_id}"
		WEB_LOGGER "${LANG_020:=·}" "name=${CGI_name}"
		retjson 0 "${LANG_005:=ɹ}"
	fi
}


proxy_disable()
{
	errmsg=`${FLOWEYE} nat config disableproxy=${CGI_id}`

	if [ "$?" != "0" ]; then
		retjson 1 "${LANG_002:=ʧ}:${errmsg}"
	else
		sync_floweye "nat config disableproxy=${CGI_id}"
		WEB_LOGGER "${LANG_021:=·}" "name=${CGI_name}"
		retjson 0 "${LANG_005:=ɹ}"
	fi
}


bantch_enable()
{
	CGI_items=`echo ${CGI_items} | tr ',' ' '`
	cmdargs=""

	for name in ${CGI_items}
	do
		cmdargs="${cmdargs} enableproxy=${name}"
	done

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

	if [ $? -ne 0 ]; then
		retjson 1 "${errmsg}"
	else
		sync_floweye "nat config ${cmdargs}"
		WEB_LOGGER "${LANG_022:=·}" "${LANG_010:=}=${CGI_num}"
		retjson 0 "${LANG_005:=ɹ}"
	fi
}


bantch_disable()
{
	CGI_items=`echo ${CGI_items} | tr ',' ' '`
	cmdargs=""

	for name in ${CGI_items}
	do
		cmdargs="${cmdargs} disableproxy=${name}"
	done

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

	if [ $? -ne 0 ]; then
		retjson 1 "${errmsg}"
	else
		sync_floweye "nat config ${cmdargs}"
		WEB_LOGGER "${LANG_023:=·}" "${LANG_010:=}=${CGI_num}"
		retjson 0 "${LANG_005:=ɹ}"
	fi
}


bantch_remove()
{
	errcount=0
	allcount=0
	CGI_items=`echo ${CGI_items} | tr ',' ' '`
	for id in ${CGI_items}
	do
		errmsg=`${FLOWEYE} nat rmvproxy ${id}`
		[ "$?" != "0" ] && errcount=$((${errcount}+1))
		allcount=$((${allcount}+1))
		sync_floweye "nat rmvproxy ${id}"
	done

	if [ "${errcount}" != "0" ]; then
		retjson 1 "${LANG_003:=ܹ}${allcount}${LANG_002:=ʧ}${errcount}${LANG_004:=·ʹУ޷ɾ}"
	else
		WEB_LOGGER "${LANG_024:=ɾ·}" "${LANG_010:=}=${CGI_num}"
		retjson 0 "${LANG_005:=ɹ}"
	fi
}


bantch_reload()
{
	cmdargs=""
	CGI_items=`echo ${CGI_items} | tr ',' ' '`
	for name in ${CGI_items}
	do
		cmdargs="${cmdargs} redial=${name}"
	done

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

	WEB_LOGGER "${LANG_0025:=ز·}" "${LANG_010:=}=${CGI_num}"
	retjson 0 "${LANG_005:=ɹ}"
}


add_group()
{
	CGI_items=`echo ${CGI_items} | tr ',' ' '`
	cmdargs=""

	for pxyid in ${CGI_items}
	do
		cmdargs="${cmdargs} pxygrp_${pxyid}=${CGI_group}"
	done

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

	if [ $? -ne 0 ]; then
		retjson 1 "${errmsg}"
	else
		sync_floweye "nat config ${cmdargs}"
		WEB_LOGGER "add_proxy_group" "nat config ${cmdargs}"
		retjson 0 "${LANG_005:=ɹ}"
	fi
}


load_group()
{
	${FLOWEYE} nat config listgroup=1 | awk \
	'BEGIN{
		dot = "";
		printf "[";
	}{
		printf "%s\"%s\"", dot, $1;
		if ( dot == "") dot = ",";
	}END{
		printf "]";
	}'
}


proxy_log_list()
{
	en=0
	[ "${PALANG}" = "en" ] && en=1
	
	end=$((${CGI_limit} * ${CGI_page}))
	start=$((${end} - ${CGI_limit}))

	if [ "${CGI_pxy_id}" != "" ]; then
		pxy_name=`${FLOWEYE} nat getproxy ${CGI_pxy_id} | grep "^name=" | cut -d"=" -f2`
	fi

	${FLOWEYE} syslog list proxy en=${en} | grep "${CGI_keyword}" | awk \
	-v name="${pxy_name}" -v start=${start} -v end=${end} \
	'BEGIN{
		row = 0;
		dot = "";
		printf "{\"data\":[";
	}{
		if(name != "" && $2 != name) next;

		row++;
		if(row > end || row < start) next;
		
		printf "%s{", dot;
		printf "\"time\":\"%s\",", $1;
		printf "\"name\":\"%s\",", $2;
		printf "\"event\":\"%s\"", $3;
		printf "}"
		
		if(dot == "") dot = ",";
	}END{
		printf "],\"total\":\"%s\"}", row;
	}'
}


import_local()
{
	row=1

	while read type name ifname other
	do
		is_name=`echo ${name} | grep "^name="`
		[ "${is_name}" = "" ] && retjson 1 "INV_FILE"

		is_ifname=`echo ${ifname} | grep "^ifname="`
		[ "${is_name}" = "" ] && retjson 1 "INV_FILE"
		
		[ "${type}" = "natproxy" ] && type="proxy"
		[ "${type}" = "pppoeif" ] && type="pppoe"
	
		errmsg=`${FLOWEYE} nat add${type} ${name} ${ifname} ${other}`

		if [ $? -ne 0 ]; then
			if [ "${errmsg}" = "PXY_EXIST" ] ;then
				[ "${CGI_exist}" = "next" ] && continue

				errmsg=`${FLOWEYE} nat set${type} ${name} ${ifname} ${other}`
				[ $? -ne 0 ] && retjson 1 "${row}г${errmsg}"
				
			elif [ "${errmsg}" = "IF_NEXIST" ]; then
				errmsg=`${FLOWEYE} nat add${type} ${name} ifname=${CGI_ifname} ${other}`
				[ $? -ne 0 ] && retjson 1 "${row}г${errmsg}"
				
			else
				retjson 1 "${row}г${errmsg}"
			fi
		fi

		row=$((${row}+1))
	done << EOF
`cat ${CGI_file} | tr -d "\r"`
EOF

	rm ${CGI_file}
	WEB_LOGGER "${LANG_026:=·}" "${LANG_028:=}=${row}"
	retjson 0 "${LANG_027:=ɹ}"
}


import_proxy()
{
	case "${CGI_type}" in
	"local")
		import_local
		;;

	*)
		retjson 1 "UNKNOW_TYPE"
		;;
	esac
}


export_wan()
{	
	file_name="pa_wan.conf"
	
	mkdir -p ${WEB_DOWNLOAD}

	awk '{
		if($1 == "dhcpwan" || $1 == "pppoeif" || $1 == "l2tpwan" || $1 == "iwan")
			print $0;
		if($1 == "natproxy" && $2 ~ "^name")
			print $0;
	}' ${PGETC}/panabit.conf >> ${WEB_DOWNLOAD}/${file_name}

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


export_lan()
{	
	file_name="pa_lan.conf"
	
	mkdir -p ${WEB_DOWNLOAD}

	awk '{
		if($1 == "rtif")
			print $0;
	}' ${PGETC}/panabit.conf >> ${WEB_DOWNLOAD}/${file_name}

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


load_curflow_chart()
{
	[ "${CGI_id}" = "" ] && retjson 1 "NO_ID"
	
	name=`${FLOWEYE} nat getproxy ${CGI_id} | grep "^name=" | cut -d"=" -f2`

	printf "["
	printf "`${FLOWEYE} dbifpxy get name=${name} type=in`,"
	printf "`${FLOWEYE} dbifpxy get name=${name} type=out`"
	printf "]"
}


load_hisflow_chart()
{
	tag="tag=pxyinbps_${CGI_id} tag=pxyoutbps_${CGI_id} tag=pxyflow_${CGI_id}"
	hours=24
	tmend=`date +%s`

	chart_dump "${hours}" "${tmend}" "${tag}"
}


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

	"list_nat_ippool")
		retjson 0 "OK" "`list_nat_ippool`"
		;;

	"get_proxy_info")
		retjson 0 "OK" "`get_proxy_info`"
		;;

	"proxy_log_list")
		retjson 0 "OK" "`proxy_log_list`"
		;;
		
	"load_addproxy_env")
		retjson 0 "OK" "`load_addproxy_env`"
		;;
	
	"proxy_add"|"proxy_copy"|"proxy_edit")
		action_check
		proxy_add
		;;

	"proxy_addm")
		action_check
		proxy_addm
		;;

	"proxy_editm")
		action_check
		proxy_editm
		;;

	"clear_dnsfail")
		action_check
		clear_dnsfail
		;;

	"proxy_remove")
		action_check
		proxy_remove
		;;

	"proxy_reload")
		action_check
		proxy_reload
		;;

	"proxy_enable")
		action_check
		proxy_enable
		;;

	"proxy_disable")
		action_check
		proxy_disable
		;;

	"bantch_enable")
		action_check
		bantch_enable
		;;
	
	"bantch_disable")
		action_check
		bantch_disable
		;;
	
	"bantch_remove")
		action_check
		bantch_remove
		;;
	
	"bantch_reload")
		action_check
		bantch_reload
		;;
	
	"add_group")
		action_check
		add_group
		;;
	
	"load_group")
		retjson 0 "OK" "`load_group`"
		;;

	"import_proxy")
		action_check
		import_proxy
		;;

	"export_wan")
		action_check
		export_wan
		;;

	"export_lan")
		action_check
		export_lan
		;;

	"load_curflow_chart")
		retjson 0 "OK" "`load_curflow_chart`"
		;;

	"load_hisflow_chart")
		retjson 0 "OK" "`load_hisflow_chart`"
		;;

	*)
		retjson 1 "UNKNOW_ACTION"
		;;
esac
