#!/bin/sh

. ../common/ajax_common

if [ "${PALANG}" = "en" ]; then
	LANG001="Error"		#ʧ
	LANG002="Success"	#ɹ
	LANG003="Add_HTTP_Policy_Group"		#HTTPܿز
	LANG004="Copy_HTTP_Policy_Group"	#HTTPܿز
	LANG005="Src_Group"	#Դ
	LANG006="New_Group"	#²
	LANG007="Del_HTTP_Policy_Group"	#ɾHTTPܿز
	LANG008="Set_HTTP_Policy"		#HTTPܿز
	LANG009="Disable_HTTP_Policy"	#HTTPܿز
	LANG010="Enable_HTTP_Policy"	#HTTPܿز
	LANG011="Del_HTTP_Policy"		#ɾHTTPܿز
	LANG012="Disable_HTTP_Policy"	#HTTPƲ
	LANG013="Enable_HTTP_Policy"	#HTTPƲ
	LANG014="Del_HTTP_Policy"		#ɾHTTPƲ
fi


load_group()
{
    cur_group=`${FLOWEYE} urlfilter getcurgrp | cut -d" " -f1`
    def_group=`${FLOWEYE} urlfilter getdefgrp | cut -d" " -f1`
    errmsg=`${FLOWEYE} urlfilter listgrp`

    if [ "${errmsg}" = "" ]; then
        printf "[]"
        return 
    fi

    printf "["

    while read id name
    do
        defgrp="no"
        active="no"

        [ "${cur_group}" = "${id}" ] && active="yes"
        [ "${def_group}" = "${id}" ] && defgrp="yes"

        printf "${dot}{"
        printf "\"active\":\"${active}\","
        printf "\"defgrp\":\"${defgrp}\","
        printf "\"id\":\"${id}\","
        printf "\"name\":\"${name}\""
        printf "}"

        [ "${dot}" = "" ] && dot=","
    done << EOF
    ${errmsg}
EOF
    printf "]"
}


add_group()
{
    errmsg=`${FLOWEYE} urlfilter addgrp ${CGI_name}`

    if [ "$?" != "0" ]; then
        retjson 1 "${LANG001:=ʧ}${errmsg}"
    else
        sync_floweye "urlfilter addgrp ${CGI_name}"
        WEB_LOGGER "${LANG003:=HTTPܿز}" "name=${CGI_name}"
		retjson 0 "${LANG002:=ɹ}"
    fi
}


copy_group()
{
    errmsg=`${FLOWEYE} urlfilter clonegrp from=${CGI_id} to=${CGI_name}`

    if [ "$?" != "0" ]; then
        retjson 1 "${LANG001:=ʧ}${errmsg}"
    else
        sync_floweye "urlfilter clonegrp from=${CGI_id} to=${CGI_name}"
        WEB_LOGGER "${LANG004:=HTTPܿز}" "${LANG005:=Դ}=${CGI_srcname} ${LANG006:=²}=${CGI_name}"
        retjson 0 "${LANG002:=ɹ}"
    fi
}


rmv_group()
{
    errmsg=`${FLOWEYE} urlfilter rmvgrp ${CGI_id}`

    if [ $? -ne 0 ]; then
		retjson 1 "${LANG001:=ʧ}${errmsg}"
    else
        sync_floweye "urlfilter rmvgrp ${CGI_id}"
        WEB_LOGGER "${LANG007:=ɾHTTPܿز}" "id=${CGI_id}"
        retjson 0 "${LANG002:=ɹ}"
    fi
}


load_policy()
{
    stat="unuse"
    curgrp=`${FLOWEYE} urlfilter getcurgrp | cut -d" " -f1`

    [ "${CGI_link}" = "" ] && CGI_link=0
    [ "${CGI_group}" = ""  ] && CGI_group="${curgrp}"
    [ "${CGI_group}" = "0" ] && CGI_group=`${FLOWEYE} urlfilter listgrp | head -1 | cut -d" " -f1`

    if [ "${CGI_group}" = "" ]; then
        printf "{\"stat\":\"none\",\"policy\":[]}"
        return
    fi

    [ "${CGI_group}" = "${curgrp}" ] && stat='inwork'

    printf "{"
    printf "\"group\":\"${CGI_group}\","
    printf "\"stat\":\"${stat}\",\"policy\":["

    ${FLOWEYE} urlfilter getgrp "${CGI_group}" | grep -i "${CGI_keyword}" | awk \
    -v group=${CGI_group} \
    'BEGIN{
        dot = "";
    }{
        col = 1;
        printf "%s{", dot;
        printf "\"group\":\"%s\",", group;
        printf "\"id\":\"%s\",", $(col++);
        printf "\"iniftype\":\"%s\",", $(col++);
        printf "\"inifname\":\"%s\",", $(col++);
        printf "\"pool\":\"%s\",", $(col++);
        printf "\"intype\":\"%s\",", $(col++);
        printf "\"inip\":\"%s\",", $(col++);
        printf "\"inport\":\"%s\",", $(col++);
        printf "\"outtype\":\"%s\",", $(col++);
        printf "\"outip\":\"%s\",", $(col++);
        printf "\"outport\":\"%s\",", $(col++);
        printf "\"method\":\"%s\",", $(col++);
        printf "\"dnstype\":\"%s\",", $(col++);
        printf "\"dns\":\"%s\",", $(col++);
        printf "\"ext\":\"%s\",", $(col++);
        printf "\"natip\":\"%s\",", $(col++);
        printf "\"hasms\":\"%s\",", $(col++);
        printf "\"qqcnt\":\"%s\",", $(col++);
        printf "\"onlyfirst\":\"%s\",", $(col++);
        printf "\"disable\":\"%s\",", $(col++);
        printf "\"vlan\":\"%s\",", $(col++);
        printf "\"action\":\"%s\",", $(col++);
        printf "\"outpxy\":\"%s\",", $(col++);
        printf "\"pkts\":\"%s\",", $(col++);
        printf "\"actarg\":\"%s\",", $(col++);
        printf "\"outifname\":\"%s\"", $(col++);
        printf "}";
        if(dot == "") dot = ",";
    }'
    printf "]}"
}


get_policy()
{
    ${FLOWEYE} urlfilter getrule ${CGI_group} ${CGI_id} | awk -F "=" \
    'BEGIN{
        dot = "";
        printf "{";
    }{
        printf "%s", dot;
        printf "\"%s\":\"%s\"", $1, $2;
        if (dot == "") dot = ",";
    }END{
        printf "}";
    }'
}


load_addpolicy_env()
{
    . ../common/ajax_object_lib

    printf "{"
    printf "\"iptab_list\":`lib_iptable_list`"
    printf ",\"ippool_list\":`lib_ippool_list`"
    printf ",\"proxy_list\":`lib_proxy_list wan`"
    printf ",\"routeif_list\":`lib_proxy_list lan`"
    printf ",\"dnsgrp_list\":`lib_dnsgrp_list`"
    printf ",\"urlfilter_list\":`lib_urlfilter_list`"
    printf ",\"interface_list\":`lib_interface_list`"

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

    printf "}"
}


add_policy()
{
    [ "${CGI_group}" = "" ] && retjson 1 "INV_GROUP"
    [ "${CGI_action}" = "edit_policy" ] && action="setrule id=${CGI_oldid} newid=${CGI_id}" || action="addrule id=${CGI_id}"

    case "${CGI_srctype}" in
        "any")
            CGI_inip="any"
            ;;
        "net")
            CGI_inip="${CGI_inipnet}"
            ;;
        "iprange")
            CGI_inip="${CGI_iniprng}"
            ;;
        "table")
            CGI_inip="${CGI_iniptab}"
            ;;
    esac

    if [ "${CGI_srcport}" != "" -a "${CGI_srcport}" != "0" ]; then
        CGI_inip="${CGI_inip}:${CGI_srcport}"
    fi

    case "${CGI_dsttype}" in
        "any")
            CGI_outip="any"
            ;;
        "net")
            CGI_outip="${CGI_outipnet}"
            ;;
        "iprange")
            CGI_outip="${CGI_outiprng}"
            ;;
        "table")
            CGI_outip="${CGI_outiptab}"
            ;;
    esac

    if [ "${CGI_dstport}" != "" -a "${CGI_dstport}" != "0" ]; then
        CGI_outip="${CGI_outip}:${CGI_dstport}"
    fi

	[ "${CGI_natip}" = "" ] && CGI_natip="0"
	[ "${CGI_hasms}" = "" ] && CGI_hasms="0"
	[ "${CGI_qqcnt}" = "" ] && CGI_qqcnt="0"
	[ "${CGI_outpxy}" = "" ] && CGI_outpxy="NULL"

	cmdargs="group=${CGI_group} src=${CGI_inip} dst=${CGI_outip} pool=${CGI_pool}"
	[ "${CGI_inif}" != "any" ] && cmdargs="${cmdargs} inif=${CGI_inif}"
	cmdargs="${cmdargs} method=${CGI_method} ext=${CGI_ext} dns=${CGI_dns} "
	cmdargs="${cmdargs} natip=${CGI_natip} hasms=${CGI_hasms} qqcnt=${CGI_qqcnt} onlyfirst=${CGI_onlyfirst}"
	cmdargs="${cmdargs} outpxy=${CGI_outpxy} action=${CGI_pact}"
	[ "${CGI_vlan}" != "" ] && cmdargs="${cmdargs} vlan=${CGI_vlan}"

	if [ "${CGI_pact}" = "reqfwd" ]; then
		cmdargs="${cmdargs} actarg=${CGI_ifname}-${CGI_actarg}"
	else
		[ "${CGI_actarg}" != "" ] && cmdargs="${cmdargs} actarg=${CGI_actarg}"
	fi

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

    if [ $? -ne 0 ]; then
        retjson 1 "${LANG001:=ʧ}:${errmsg}"
    else
        sync_floweye "urlfilter ${action} ${cmdargs}"
        WEB_LOGGER "${LANG008:=HTTPܿز}" "${action} group=${CGI_group} id=${CGI_id}"
        retjson 0 "${LANG002:=ɹ}"
    fi
}


disable_policy()
{
    [ "${CGI_group}" = "" ] && retjson 1 "INV_GROUP"
    [ "${CGI_id}" = "" ] && retjson 1 "INV_ID"

    errmsg=`${FLOWEYE} urlfilter setrule group=${CGI_group} id=${CGI_id} disable=1`

    if [ $? -ne 0 ]; then
        retjson 1 "${LANG001:=ʧ}${errmsg}"
    else
        sync_floweye "urlfilter setrule group=${CGI_group} id=${CGI_id} disable=1"
        WEB_LOGGER "${LANG009:=HTTPܿز}" "group=${CGI_group},id=${CGI_id}"
        retjson 0 "${LANG002:=ɹ}"
    fi
}


enable_policy()
{
    [ "${CGI_group}" = "" ] && retjson 1 "INV_GROUP"
    [ "${CGI_id}" = "" ] && retjson 1 "INV_ID"

    errmsg=`${FLOWEYE} urlfilter setrule group=${CGI_group} id=${CGI_id} disable=0`

    if [ $? -ne 0 ]; then
        retjson 1 "${LANG001:=ʧ}${errmsg}"
    else
        sync_floweye "urlfilter setrule group=${CGI_group} id=${CGI_id} disable=0"
        WEB_LOGGER "${LANG010:=HTTPܿز}" "group=${CGI_group},id=${CGI_id}"
        retjson 0 "${LANG002:=ɹ}"
    fi
}


remove_policy()
{
    [ "${CGI_group}" = "" ] && retjson 1 "INV_GROUP"
    [ "${CGI_id}" = "" ] && retjson 1 "INV_ID"

    errmsg=`${FLOWEYE} urlfilter rmvrule ${CGI_group} ${CGI_id}`

    if [ $? -ne 0 ]; then
        retjson 1 "${LANG001:=ʧ}${errmsg}"
    else
        sync_floweye "urlfilter rmvrule ${CGI_group} ${CGI_id}"
        WEB_LOGGER "${LANG011:=ɾHTTPܿز}" "group=${CGI_group},id=${CGI_id}"
        retjson 0 "${LANG002:=ɹ}"
    fi
}


btndisable_policy()
{
    for id in `echo ${CGI_items} | tr ";" " "`
    do
        errmsg=`${FLOWEYE} urlfilter setrule group=${CGI_group} id=${id} disable=1`
        [ $? -ne 0 ] && retjson 1 "${errmsg}"
        sync_floweye "urlfilter setrule group=${CGI_group} id=${id} disable=1"
    done

    WEB_LOGGER "${LANG012:=HTTPƲ}" "group=${CGI_group} ids=${CGI_items}"
        retjson 0 "${LANG002:=ɹ}"
}


btnenable_policy()
{
    for id in `echo ${CGI_items} | tr ";" " "`
    do
        errmsg=`${FLOWEYE} urlfilter setrule group=${CGI_group} id=${id} disable=0`
        [ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}${errmsg}"
        sync_floweye "urlfilter setrule group=${CGI_group} id=${id} disable=0"
    done

    WEB_LOGGER "${LANG013:=HTTPƲ}" "group=${CGI_group}  ids=${CGI_items}"
    retjson 0 "ɹ"
}


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

    WEB_LOGGER "${LANG014:=ɾHTTPƲ}" "group=${CGI_group} ids=${CGI_items}"
	retjson 0 "${LANG002:=ɹ}"
}


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

    "load_policy")
        retjson 0 "OK" "`load_policy`"
        ;;


    "load_addpolicy_env")
        retjson 0 "OK" "`load_addpolicy_env`"
        ;;

    "add_group")
        action_check
        add_group
        ;;

    "copy_group")
        action_check
        copy_group
        ;;

    "rmv_group")
        action_check
        rmv_group
        ;;

    "add_policy"|"edit_policy")
        action_check
        add_policy
        ;;
    
    "disable_policy")
        action_check
        disable_policy
        ;;

    "enable_policy")
        action_check
        enable_policy
        ;;

    "remove_policy")
        action_check
        remove_policy
        ;;

    "btndisable_policy")
        action_check
        btndisable_policy
        ;;

    "btnenable_policy")
        action_check
        btnenable_policy
        ;;

    "btnremove_policy")
        action_check
        btnremove_policy
        ;;

    *)
        retjson 1 "UNKNOW_ACTION"
        ;;
esac
