#!/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 group=${CGI_group} json=1
    printf "]}"
}


get_policy()
{
    ${FLOWEYE} urlfilter getrule group=${CGI_group} id=${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 "\"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"
    
    if [ "${CGI_action}" = "edit_policy" ]; then
        cmdargs="setrule group=${CGI_group} id=${CGI_oldid} newid=${CGI_id}"
    else
        cmdargs="addrule group=${CGI_group} id=${CGI_id}"
    fi

    [ "${CGI_vlan}"  = "" ] && CGI_vlan="0"
	[ "${CGI_natip}" = "" ] && CGI_natip="0"
	[ "${CGI_hasms}" = "" ] && CGI_hasms="0"
	[ "${CGI_qqcnt}" = "" ] && CGI_qqcnt="0"
	[ "${CGI_outpxy}" = "" ] && CGI_outpxy="NULL"
    [ "${CGI_log}" = "on" ] && CGI_log=1 || CGI_log=0

    cmdargs="${cmdargs} inif=${CGI_inif} src=${CGI_submit_srcip} dst=${CGI_submit_dstip} sport=${CGI_sport} dport=${CGI_dport}"
	cmdargs="${cmdargs} pool=${CGI_pool} 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} nexthop=${CGI_nexthop} vlan=${CGI_vlan} log=${CGI_log}"

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

    if [ $? -ne 0 ]; then
        retjson 1 "${LANG001:=ʧ}:${errmsg}"
    else
        sync_floweye "urlfilter ${action} ${cmdargs}"
        WEB_LOGGER "${LANG008:=HTTPܿز}" "${cmdargs}"
        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"

    cmdargs="rmvrule group=${CGI_group} id=${CGI_id}"
    errmsg=`${FLOWEYE} urlfilter ${cmdargs}`

    if [ $? -ne 0 ]; then
        retjson 1 "${LANG001:=ʧ}${errmsg}"
    else
        sync_floweye "urlfilter ${cmdargs}"
        WEB_LOGGER "${LANG011:=ɾHTTPܿز}" "${cmdargs}"
        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 group=${CGI_group} id=${id}`
        [ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}${errmsg}"
        sync_floweye "urlfilter rmvrule group=${CGI_group} id=${id}"
    done

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


export_policy()
{
    group_name=`${FLOWEYE} urlfilter listgrp | grep "^${CGI_id} " | cut -d" " -f2`

    file_name="HTTP_${group_name}.conf"
    file_path="${WEB_DOWNLOAD}/${file_name}"

    mkdir -p ${WEB_DOWNLOAD}

    grep "urlpolicy group=${group_name}" "${PGETC}/panabit.conf" | cut -d" " -f3- > ${file_path}
    retjson 0 "OK" "{\"file_name\":\"${file_name}\"}"
}


import_policy()
{
    # ɾԭб
    for pid in `${FLOWEYE} urlfilter getgrp group=1 json=0 | cut -d" " -f2`
    do
    ${FLOWEYE} urlfilter rmvrule group=${CGI_group} id=${pid}
    done

    cat ${CGI_file} | while read cfg
    do
        [ "${cfg}" = "" ] && continue
        errmsg=`${FLOWEYE} urlfilter addrule group=${CGI_group} ${cfg}`
        [ $? -ne 0 ] && retjson 1 "ʧܣ${errmsg}"
    done

    WEB_LOGGER "HTTPܿز" "group=${CGI_grouop}"
    retjson 0 "ɹ"
}


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
        ;;

    "export_policy")
        action_check
        export_policy
        ;;

    "import_policy")
        action_check
        import_policy
        ;;

    *)
        retjson 1 "UNKNOW_ACTION"
        ;;
esac
