#!/bin/sh

. ../common/ajax_common

if [ "${PALANG}" = "en" ]; then
	LANG001="Error"		#ʧ
	LANG002="Success"	#ɹ
	LANG003="Set_Session_Policy_Stat"	#ӹܿز
	LANG004="Add_Session_Policy_Group"	#Ʋ
	LANG005="Copy_Policy_Group"			#Ʋ
	LANG006="Src_Group"	#Դ
	LANG007="New_Group"	#²
	LANG008="Del_Session_Policy_Group"	#ɾƲ
	LANG009="Set_Session_Policy_Policy"	#Ʋ
	LANG010="Del_Session_Policy_Policy"	#ɾƲ
	LANG011="Del_Session_Policy_Policy"	#ɾƲ
fi


load_group()
{
    cur_group=`${FLOWEYE} conlimit getcurgrp | cut -d" " -f1`
    def_group=`${FLOWEYE} conlimit getdefgrp | cut -d" " -f1`
    errmsg=`${FLOWEYE} conlimit 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 "]"
}


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

    ${FLOWEYE} flow stat | awk -F"=" \
    '{
        printf ",\"%s\":\"%s\"", $1, $2;
    }END{
        printf "}"   
    }'
}


set_conlimit_stat()
{
    errmsg=`${FLOWEYE} flow config dropflow_ttl=${CGI_dropflow_ttl} maxflow_perip=${CGI_maxflow_perip}`
    [ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}:${errmsg}"

    errmsg=`${FLOWEYE} conlimit config ignore_dns=${CGI_ignore_dns}`
    [ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}:${errmsg}"

    sync_floweye "conlimit config ignore_dns=${CGI_ignore_dns}"
    WEB_LOGGER "${LANG003:=ӹܿز}" "dropflow_ttl=${CGI_dropflow_ttl} maxflow_perip=${CGI_maxflow_perip} ignore_dns=${CGI_ignore_dns}"
	retjson 0 "${LANG002:=ɹ}"
}


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

    if [ "$?" != "0" ]; then
        retjson 1 "${LANG001:=ʧ}${errmsg}"
    else
        sync_floweye "conlimit addgrp ${CGI_name}"
        WEB_LOGGER "${LANG004:=Ʋ}" "name=${CGI_name}"
		retjson 0 "${LANG002:=ɹ}"
    fi
}


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

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


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

    if [ $? -ne 0 ]; then
		retjson 1 "${LANG001:=ʧ}${errmsg}"
    else
        sync_floweye "conlimit rmvgrp ${CGI_id}"
        WEB_LOGGER "${LANG008:=ɾƲ}" "id=${CGI_id}"
		retjson 0 "${LANG002:=ɹ}"
    fi
}


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

    [ "${CGI_link}" = "" ] && CGI_link=0
    [ "${CGI_group}" = ""  ] && CGI_group="${curgrp}"
    [ "${CGI_group}" = "0" ] && CGI_group=`${FLOWEYE} conlimit 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} conlimit getgrp "${CGI_group}"
    printf "]}"
}


get_policy()
{
    ${FLOWEYE} conlimit 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 "\"bridge_list\":`lib_bridge_list`"
    printf ",\"interface_list\":`lib_interface_list`"

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

    printf "}"
}


add_policy()
{
    [ "${CGI_action}" = "edit_policy" ] && action="setrule" || action="addrule"

	[ "${CGI_maxtflow}" = "" ] && CGI_maxtflow="0"
	[ "${CGI_maxuflow}" = "" ] && CGI_maxuflow="0"
	[ "${CGI_maxflow}" = "" ] &&  CGI_maxflow="0"
    [ "${CGI_vlan}" = "" ] && CGI_vlan="0-0"

	cmdargs="${action} group=${CGI_group} id=${CGI_id} vlan=${CGI_vlan} inip=${CGI_submit_srcip} outip=${CGI_submit_dstip}"
    cmdargs="${cmdargs} inport=${CGI_inport} outport=${CGI_outport} app=${CGI_appid} maxtcpflow=${CGI_maxtflow}"
    cmdargs="${cmdargs} maxudpflow=${CGI_maxuflow} maxflow=${CGI_maxflow} bridge=${CGI_bridge} ifname=${CGI_ifname}"

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

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


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

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

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


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

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


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

    file_name="clpolicy_${group_name}.conf"
    file_path="${WEB_DOWNLOAD}/${file_name}"
    
    mkdir -p ${WEB_DOWNLOAD}

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


import_policy()
{
    # ɾԭб
    for pid in `grep "clpolicy group=aa" "${PGETC}/panabit.conf" | cut -d" " -f3| cut -d"=" -f2`
    do
        ${FLOWEYE} conlimit rmvrule ${CGI_group} ${pid}
    done

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

    WEB_LOGGER "${LANG017:=ӿ}"
    retjson 0 "ɹ"
}


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

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

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

    "set_conlimit_stat")
        action_check
        set_conlimit_stat
        ;;

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

    "remove_policy")
        action_check
        remove_policy
        ;;

    "btnremove_policy")
        action_check
        btnremove_policy
        ;;

    "export_policy")
        action_check
        export_policy
        ;;

    "import_policy")
        action_check
        import_policy
        ;;

    *)
        retjson 1 "UNKNOW_ACTION"
        ;;
esac
