#!/bin/sh

. ../common/ajax_common

if [ "${PALANG}" = "en" ]; then
	LANG001="Error"		#ʧ
	LANG002="Success"	#ɹ
	LANG003="Force_iwan_users_offline"	#ǿiWANû
	LANG004="Force_iwan_users_offline"	#ǿiWANû
	LANG005="Set_iWAN_Server"	#iWAN
	LANG006="Del_iWAN_Server"	#ɾiWAN
	LANG007="Disable_iWAN_Server"	#iWAN
	LANG008="Enable_iWAN_Server"	#iWAN
	LANG009="Del_iWAN_Server"		#ɾiWAN
	LANG010="Disable_iWAN_Server"	#iWAN
	LANG011="Enable_iWAN_Server"	#iWAN
	LANG012="Add_iWAN_MAP"	#iWANӳ
	LANG013="Del_iWAN_MAP"	#ɾiWANӳ
fi


list_iwan_user()
{
	[ "${CGI_page}" = "" ] && CGI_page=1
	[ "${CGI_limit}" = "" ] && CGI_limit=100

	end=$(( ${CGI_page} * ${CGI_limit} ))
	start=$(( ${end} - ${CGI_limit} ))

    ${FLOWEYE} sdwsvr list | grep -i "${CGI_keyword}" | awk \
    -v server="${CGI_server}" -v start=${start} -v end=${end} \
    'BEGIN{
		row = 0;
		dot = "";
        printf "{\"data\":[";
    }{
        if(server != "" && $1 != server) next;

		row++;
		if( row > end  || row < start ) next;

        col=1;
        printf "%s", dot;
        printf "{";
        printf "\"server\":\"%s\",", $(col++);
        printf "\"id\":\"%s\",", $(col++);
        printf "\"srid\":\"%s\",", $(col++);
        printf "\"acct\":\"%s\",", $(col++);
        printf "\"token\":\"%s\",", $(col++);
        printf "\"mtu\":\"%s\",", $(col++);
        printf "\"ip\":\"%s\",", $(col++);
        printf "\"gateway\":\"%s\",", $(col++);
        printf "\"dns0\":\"%s\",", $(col++);
        printf "\"dns1\":\"%s\",", $(col++);
        printf "\"state\":\"%s\",", $(col++);
        printf "\"myip\":\"%s\",", $(col++);
        printf "\"myport\":\"%s\",", $(col++);
        printf "\"peerip\":\"%s\",", $(col++);
        printf "\"peerport\":\"%s\",", $(col++);
        printf "\"inbps\":\"%s\",", $(col++);
        printf "\"outbps\":\"%s\",", $(col++);
        printf "\"flowcnt\":\"%s\",", $(col++);
        printf "\"onlinetime\":\"%s\",", $(col++);
        printf "\"leftime\":\"%s\",", $(col++);
        printf "\"curdelay\":\"%s\",", $(col++);
        printf "\"mindelay\":\"%s\",", $(col++);
        printf "\"maxdelay\":\"%s\",", $(col++);
        printf "\"l2vlan\":\"%s\",", $(col++);
        printf "\"l2vportid\":\"%s\",", $(col++);
        printf "\"linkmapid\":\"%s\",", $(col++);
        printf "\"link\":\"%s\"", $(col++);
        printf "}";
        if(dot == "") dot = ",";
    }END{
        printf "],\"total\":%s}", row;
    }'
}


list_iwan_svr()
{
    printf "["
    ${FLOWEYE} nat listproxy onlystat=1 json=1 type=iwansvc
    printf "]"
}


list_iwan_map()
{
    [ "${CGI_id}" != "" ] && cmgargs="server=${CGI_id}"

    ${FLOWEYE} iwanmap list "${cmgargs}" | awk \
    'BEGIN{
        dot = "";
        printf "[";
    }{
        col = 1;
        printf "%s", dot;
        printf "{";
        printf "\"pxyname\":\"%s\",", $(col++);
        printf "\"pxyid\":\"%s\",", $(col++);
        printf "\"port\":\"%s\",", $(col++);
        printf "\"svrname\":\"%s\",", $(col++);
        printf "\"svrid\":\"%s\",", $(col++);
        printf "\"pkts\":\"%s\"", $(col++);
        printf "}";
        if(dot == "") dot = ",";
    }END{
        printf "]";
    }'
}


load_iwansvr_list()
{
    printf "{"
    printf "\"list\":`list_iwan_svr`"
    printf ",\"map\":`list_iwan_map`"
    printf "}"
}


list_iwan_log()
{
    ${FLOWEYE} syslog list iwansvc | grep -i "${CGI_keyword}" | awk \
    'BEGIN{
        dot = "";
        printf "[";
    }{
        col = 1;
        printf "%s", dot;
        printf "{";
        printf "\"time\":\"%s\",", $(col++);
        printf "\"name\":\"%s\",", $(col++);
        printf "\"event\":\"%s\"", $(col++);
        printf "}";
        if(dot == "") dot = ",";
    }END{
        printf "]";
    }'
}


click_iwan_user()
{
    errmsg=`${FLOWEYE} sdwsvr config entryclose=${CGI_id}`

    if [ $? -ne 0 ]; then
        retjson 1 "${LANG001:=ʧ}:${errmsg}"
    else
        sync_floweye "sdwsvr config entryclose=${CGI_id}"
        WEB_LOGGER "${LANG003:=ǿiWANû}" id="${CGI_id} acct=${CGI_acct}"
		retjson 0 "${LANG002:=ɹ}"
    fi
}


btn_click_iwanuser()
{
	for id in `echo ${CGI_items} | tr ";" " "`
	do
		errmsg=`${FLOWEYE} sdwsvr config entryclose=${id}`
		[ $? -ne 0 ] && retjson 1 "${errmsg}"
        sync_floweye "sdwsvr config entryclose=${id}"
	done

	WEB_LOGGER "${LANG004:=ǿiWANû}" "ids=${CGI_items}"
	retjson 0 "${LANG002:=ɹ}"
}


get_iwansvr()
{
	${FLOWEYE} nat getproxy ${CGI_id} | awk -F "=" \
	'BEGIN{
		dot = "";
		printf "{";
	}{
		printf "%s", dot;
		printf "\"%s\":\"%s\"", $1, $2;
		if (dot == "") dot = ",";
	}END{
		printf "}";
	}'
}


load_add_iwansvr_env()
{
	. ../common/ajax_object_lib

	printf "{"
	printf "\"radius\":`lib_radsvr_list`"
	printf ",\"ippool\":`lib_ippool_list`"

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

	printf "}"
}


load_iwanmap_env()
{
	. ../common/ajax_object_lib

	printf "{"
	printf "\"iwansvr\":`list_iwan_svr`"
    printf ",\"map\":`list_iwan_map`"
	printf ",\"proxy\":`lib_proxy_list proxy.pppoe.dhcpwan.proxy6.dhcpwan6`"
	printf "}"
}


add_iwansvr()
{
	[ "${CGI_mtu}" = "" ] && CGI_mtu="1436"
    [ "${CGI_radsvrid}" = "" ] && CGI_radsvrid=0

    action="addiwansvc name=${CGI_newname} "
    [ "${CGI_action}" = "proxy_edit" ] && action="setiwansvc id=${CGI_id} name=${CGI_name} newname=${CGI_newname}"

	cmdargs="addr=${CGI_addr} mtu=${CGI_mtu} ${cmdargs} auth=${CGI_auth} pool=${CGI_pool} radsvr=${CGI_radsvrid}"

    if [ "${CGI_ipv6}" = "on" ]; then
        cmdargs="${cmdargs} prefix6len=${CGI_ipv6_prefixlen} prefix6=${CGI_ipv6_prefix} v6dns=${CGI_ipv6_dns}"
    else
        cmdargs="${cmdargs} prefix6len=0"
    fi
    
	errmsg=`${FLOWEYE} nat ${action} ${cmdargs}`

	if [ $? -ne 0 ]; then
        retjson 1 "${LANG001:=ʧ}:${errmsg}"
	else
        sync_floweye "nat ${action} ${cmdargs}"
        WEB_LOGGER "${LANG005:=iWAN}" "${action} ${cmdargs}"
		retjson 0 "${LANG002:=ɹ}"
	fi
}


rmv_iwansvr()
{
	errmsg=`${FLOWEYE} nat rmvproxy ${CGI_name}`

	if [ $? -ne 0 ]; then
        retjson 1 "${LANG001:=ʧ}:${errmsg}"
	else
        sync_floweye "nat rmvproxy ${CGI_name}"
        WEB_LOGGER "${LANG006:=ɾiWAN}" "name=${CGI_name}"
		retjson 0 "${LANG002:=ɹ}"
	fi
}


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

	if [ $? -ne 0 ]; then
        retjson 1 "${LANG001:=ʧ}:${errmsg}"
	else
        sync_floweye "nat config disableproxy=${CGI_id}"
        WEB_LOGGER "${LANG007:=iWAN}" "name=${CGI_name}"
		retjson 0 "${LANG002:=ɹ}"
	fi
}


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

	if [ $? -ne 0 ]; then
        retjson 1 "${LANG001:=ʧ}:${errmsg}"
	else
        sync_floweye "nat config enableproxy=${CGI_id}"
        WEB_LOGGER "${LANG008:=iWAN}" "name=${CGI_name}"
		retjson 0 "${LANG002:=ɹ}"
	fi
}


btn_remove_iwansvr()
{
	for name in `echo ${CGI_items} | tr ";" " "`
	do
		errmsg=`${FLOWEYE} nat rmvproxy ${name}`
		[ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}:${errmsg}"
        sync_floweye "nat rmvproxy ${name}"
	done

	WEB_LOGGER "${LANG009:=ɾiWAN}" "ids=${CGI_items}"
	retjson 0 "${LANG002:=ɹ}"
}


btn_disable_iwansvr()
{
	for id in `echo ${CGI_items} | tr ";" " "`
	do
		errmsg=`${FLOWEYE} nat config disableproxy=${id}`
		[ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}:${errmsg}"
        sync_floweye "nat config disableproxy=${id}"
	done

	WEB_LOGGER "${LANG010:=iWAN}" "ids=${CGI_items}"
	retjson 0 "${LANG002:=ɹ}"
}


btn_enable_iwansvr()
{
	for id in `echo ${CGI_items} | tr ";" " "`
	do
		errmsg=`${FLOWEYE} nat config enableproxy=${id}`
		[ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}:${errmsg}"
        sync_floweye "nat config enableproxy=${id}"
	done

	WEB_LOGGER "${LANG011:=iWAN}" "ids=${CGI_items}"
	retjson 0 "${LANG002:=ɹ}"
}


add_iwan_map()
{
	errmsg=`${FLOWEYE} iwanmap set proxy=${CGI_pxyid} port=${CGI_port} server=${CGI_svrid}`

	if [ $? -ne 0 ]; then
        retjson 1 "${LANG001:=ʧ}:${errmsg}"
	else
        sync_floweye "iwanmap set proxy=${CGI_pxyid} port=${CGI_port} server=${CGI_svrid}"
        WEB_LOGGER "${LANG012:=iWANӳ}" "proxy=${CGI_pxyid} port=${CGI_port}"
		retjson 0 "${LANG002:=ɹ}"
	fi
}


rmv_iwan_map()
{
	errmsg=`${FLOWEYE} iwanmap set proxy=${CGI_pxyid} port=${CGI_port} server=NULL`

	if [ $? -ne 0 ]; then
        retjson 1 "${LANG001:=ʧ}:${errmsg}"
	else
        sync_floweye "iwanmap set proxy=${CGI_pxyid} port=${CGI_port} server=NULL"
        WEB_LOGGER "${LANG013:=ɾiWANӳ}" "proxy=${CGI_pxyid} port=${CGI_port}"
		retjson 0 "${LANG002:=ɹ}"
	fi
}


case "${CGI_action}" in
    "list_iwan_svr")
        retjson 0 "OK" "`list_iwan_svr`"
        ;;
    
    "list_iwan_user")
        retjson 0 "OK" "`list_iwan_user`"
        ;;
    
    "list_iwan_map")
        retjson 0 "OK" "`list_iwan_map`"
        ;;

    "load_iwansvr_list")
        retjson 0 "OK" "`load_iwansvr_list`"
        ;;
        
    "list_iwan_log")
        retjson 0 "OK" "`list_iwan_log`"
        ;;
    
    "click_iwan_user")
        action_check
        click_iwan_user
        ;;

    "btn_click_iwanuser")
        action_check
        btn_click_iwanuser
        ;;

    "load_add_iwansvr_env")
        retjson 0 "OK" "`load_add_iwansvr_env`"
        ;;
    
    "load_iwanmap_env")
        retjson 0 "OK" "`load_iwanmap_env`"
        ;;
    
    "add_iwansvr"|"proxy_edit")
        action_check
        add_iwansvr
        ;;

    "rmv_iwansvr")
        action_check
        rmv_iwansvr
        ;;

    "disable_iwansvr")
        action_check
        disable_iwansvr
        ;;

    "enable_iwansvr")
        action_check
        enable_iwansvr
        ;;

    "btn_remove_iwansvr")
        action_check
        btn_remove_iwansvr
        ;;

    "btn_disable_iwansvr")
        action_check
        btn_disable_iwansvr
        ;;

    "btn_enable_iwansvr")
        action_check
        btn_enable_iwansvr
        ;;

    "add_iwan_map")
        action_check
        add_iwan_map
        ;;
    
    "rmv_iwan_map")
        action_check
        rmv_iwan_map
        ;;

    "list_switch_account")
        retjson 0 "OK" "`list_switch_account`"
        ;;
    "load_lan_stat")
        retjson 0 "OK" "`load_lan_stat`"
        ;;
    "add_vlan")
        action_check
        add_vlan
        ;;

    *)
        retjson 1 "UNKNOW_ACTION"
        ;;
esac
