#!/bin/sh

. ../common/ajax_common


get_group_detail()
{
    ${FLOWEYE} policygroup2 get id=${CGI_id} | awk -F "=" \
    'BEGIN{
        dot = "";
        printf "{";
    }{
        printf "%s", dot;
        printf "\"%s\":\"%s\"", $1, $2;
        if (dot == "") dot = ",";
    }END{
        printf "}";
    }'
}


get_group_schtime()
{
    ${FLOWEYE} policygroup2 get id=${CGI_id} time=1 | awk \
    'BEGIN{
        dot = "";
        printf "[";
    }{
        col = 1;

        printf "%s{", dot;
        printf "\"month\":\"%s\"", $(col++);
        printf ",\"start_day\":\"%s\"", $(col++);
        printf ",\"end_day\":\"%s\"", $(col++);
        printf ",\"start_time\":\"%s\"", $(col++);
        printf ",\"end_time\":\"%s\"", $(col++);
        printf "}";
        if(dot == "") dot =",";
    }END{
        printf "]";
    }'
}


rmv_group_schtime()
{
    cmdargs="${CGI_month},${CGI_start_day}-${CGI_end_day},${CGI_start_time}-${CGI_end_time}"
    errmsg=`${FLOWEYE} newpolicy config group=${CGI_name} rmvtime=${cmdargs}`

    if [ $? -ne 0 ]; then
        retjson 1 "ʧ:${errmsg}"
    else
        sync_floweye "newpolicy config group=${CGI_name} rmvtime=${cmdargs}"
        WEB_LOGGER "ɾʱ" "group=${CGI_name} rmvtime=${cmdargs}"
        retjson 0 "ɹ"
    fi
}


add_group_schtime()
{
    cmdargs="${CGI_month},${CGI_start_day}-${CGI_end_day},${CGI_time}"
    errmsg=`${FLOWEYE} newpolicy config group=${CGI_name} time=${cmdargs}`

    if [ $? -ne 0 ]; then
        retjson 1 "ʧ:${errmsg}"
    else
        sync_floweye "newpolicy config group=${CGI_name} time=${cmdargs}"
        WEB_LOGGER "ʱ" "group=${CGI_name} time=${cmdargs}"
        retjson 0 "ɹ"
    fi
}


get_link_group()
{
    ${FLOWEYE} if list | awk \
    'BEGIN{
        dot = "";
        printf "[";
    }{
        link=$(NF-2);
        if(link == 0) next;

        printf "%s%s", dot, link;
        if(dot == "") dot = ",";
    }END{
        printf "]";   
    }'
}


load_addgroup_env()
{
    . ../common/ajax_object_lib

    printf "{"
    printf "\"interface_list\":`lib_interface_list`"
    printf ",\"link_group\":`get_link_group`"
    printf ",\"proxy_list\":`lib_proxy_list wan`"
    printf ",\"plink_list\":`lib_plink_list`"
    printf ",\"wangroup_list\":`lib_wangroup_list`"

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

    printf "}"
}


add_group()
{
    [ "${CGI_inip}" = "" ] && CGI_inip="any"
    [ "${CGI_outip}" = "" ] && CGI_outip="any"
    [ "${CGI_ifname}" = "" ] && CGI_ifname="NULL"

    cmdargs="name=${CGI_name} inip=${CGI_submit_srcip} outip=${CGI_submit_dstip} ifname=${CGI_ifname} ifbps=${CGI_ifbps}"
    cmdargs="${cmdargs} month=${CGI_month} startday=${CGI_startday} endday=${CGI_endday}"
    cmdargs="${cmdargs} start=${CGI_start_time} end=${CGI_end_time} disable=${CGI_disable} stop=${CGI_stop} bridge=${CGI_bridge}"

    if [ "${CGI_action}" = "copy_group" ]; then
        cmdargs="clonerules=${CGI_clonerules} ${cmdargs}"
    fi

    if [ "${CGI_action}" = "edit_group" ]; then
        cmdargs="set id=${CGI_id} newname=${CGI_name} ${cmdargs}"
    else
        cmdargs="add ${cmdargs}"
    fi

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

    if [ $? -ne 0 ]; then
        retjson 1 "ʧ:${errmsg}"
    else
        sync_floweye "policygroup2 ${cmdargs}"
        WEB_LOGGER "ز"
        retjson 0 "ɹ"
    fi
}


remove_group()
{
    errmsg=`${FLOWEYE} policygroup2 remove id=${CGI_id}`

    if [ $? -ne 0 ]; then
        retjson 1 "ʧ:${errmsg}"
    else
        sync_floweye "policygroup2 remove id=${CGI_id}"
        WEB_LOGGER "ɾز" "id=${CGI_id}"
        retjson 0 "ɹ"
    fi
}


move_group()
{
    cmdargs="id=${CGI_moveup} moveto=${CGI_movedown}"

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

    if [ $? -ne 0 ]; then
        retjson 1 "ʧܣ${errmsg}"
    else
        sync_floweye "policygroup2 set ${cmdargs}"
        WEB_LOGGER "ز˳" "${cmdargs}"
        retjson 0 "ɹ"
    fi
}


export_group()
{
    group_name=`${FLOWEYE} policygroup2 get id=${CGI_id} | grep "^name=" | cut -d"=" -f2`

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

    mkdir -p ${WEB_DOWNLOAD}

    grep "newrule group=${group_name} " "${PGETC}/panabit.conf" | cut -d" " -f3- > ${file_path}

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


import_group()
{
    # ɾԭ
    for pid in `${FLOWEYE} newpolicy list group=${CGI_group}`
    do
        ${FLOWEYE} newpolicy remove group=${CGI_group} id=${pid}
    done

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

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


set_enable_group()
{
    cmdargs="id=${CGI_id} disable=${CGI_disable}"
    errmsg=`${FLOWEYE} policygroup2 set ${cmdargs}`

    if [ $? -ne 0 ]; then
        retjson 1 "ʧܣ${errmsg}"
    else
        sync_floweye "policygroup2 set ${cmdargs}"
        WEB_LOGGER "ز" "${cmdargs}"
        retjson 0 "ɹ"
    fi
}


set_stop_group()
{
    cmdargs="id=${CGI_id} stop=${CGI_stop}"
    errmsg=`${FLOWEYE} policygroup2 set ${cmdargs}`

    if [ $? -ne 0 ]; then
        retjson 1 "ʧܣ${errmsg}"
    else
        sync_floweye "policygroup2 set ${cmdargs}"
        WEB_LOGGER "ز" "${cmdargs}"
        retjson 0 "ɹ"
    fi
}


list_group()
{
    ${FLOWEYE} policygroup2 list | awk \
    -v id=${CGI_id} -v active=${CGI_active} \
    'BEGIN{
        dot = "";
        printf "[";
    }{
        if(id != "" && $1 != id) next;
        if(active != "" && $4 != active) next;

        col = 1;

        printf "%s", dot;
        printf "{";
        printf "\"id\":\"%s\",", $(col++);
        printf "\"name\":\"%s\",", $(col++);
        printf "\"rulecnt\":\"%s\",", $(col++);
        printf "\"active\":\"%s\",", $(col++);
        printf "\"disable\":\"%s\",", $(col++);
        printf "\"stop\":\"%s\",", $(col++);
        printf "\"rate1\":\"%s\",", $(col++);
        printf "\"rate2\":\"%s\",", $(col++);
        printf "\"inip\":\"%s\",", $(col++);
        printf "\"outip\":\"%s\",", $(col++);
        printf "\"month\":\"%s\",", $(col++);
        printf "\"startday\":\"%s\",", $(col++);
        printf "\"endday\":\"%s\",", $(col++);
        printf "\"starthour\":\"%s\",", $(col++);
        printf "\"startmin\":\"%s\",", $(col++);
        printf "\"startsec\":\"%s\",", $(col++);
        printf "\"endhour\":\"%s\",", $(col++);
        printf "\"endmin\":\"%s\",", $(col++);
        printf "\"endsec\":\"%s\"", $(col++);
        printf "}";
        if(dot == "") dot = ",";
    }END{
        printf "]";
    }'
}


search_group()
{
    if [ ! -f ${PGETC}/panabit.conf ]; then
        printf "{}"
        return
    fi
    
    awk -v keyword="${CGI_keyword}" -v disable="${CGI_disable}" '{
        if($1 == "policygroup2") {
            if(disable != "" && $0 !~ " disable="disable )
                next;
                
            if(keyword != "" && $0 !~ keyword)
                next;

            split($2, name, "=");
            group[name[2]] = 0;
        } else if($1 == "newrule") {
            if(disable != "" && $0 !~ " disable="disable )
                next;

            if(keyword != ""){
                find = 0;

                for(i = 3; i <= NF; i++){
                    if($i ~ keyword)
                    find = 1;
                }

                if(find == 0) next;
            }

            split($2, name, "=");
            group[name[2]]++;
        }
    }END{
        dot = "";
        printf "{";

        for(key in group){
            printf "%s\"%s\":\"%s\"", dot, key, group[key];
            if(dot == "") dot = ",";
        }

        printf "}";
    }' ${PGETC}/panabit.conf
}


load_group_list()
{
    printf "{";
    printf "\"all_group\":`list_group`"

    if [ "${CGI_keyword}" != "" -o "${CGI_disable}" != "" ]; then
        printf ",\"need_show\":`search_group`"
    fi

    printf "}";
}


list_policy()
{
    printf "["
    ${FLOWEYE} newpolicy list group=${CGI_gid} json=1
    printf "]"
}


get_policy()
{
    ${FLOWEYE} newpolicy get 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_tap_group()
{
    
    ${FLOWEYE} tap list | awk \
    'BEGIN{
        dot = "";
        printf "[";
    }{
        if(NR == 1) next;
        col = 1;
        
        printf "%s{", dot;
        printf "\"id\":\"%s\",", $(col++);
        printf "\"group\":\"%s\",", $(col++);
        printf "\"type\":\"%s\"", $(col++);
        printf "}";
        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`"
    printf ",\"plink_list\":`lib_plink_list`"
    printf ",\"wangroup_list\":`lib_wangroup_list`"
    printf ",\"interface_list\":`lib_interface_list`"
    printf ",\"dnsgrp_list\":`lib_dnsgrp_list`"
    printf ",\"datapie_list\":`lib_datapie_list`"
    printf ",\"ntmso_list\":[`${FLOWEYE} ntmso list`]"

    if [ "${TAP}" = "1" ]; then
        printf ",\"tap_group_list\":`load_tap_group`"
        printf ",\"switch_port\":`lib_switch_port_list`"
    fi

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

    printf "}"
}


add_policy()
{
    [ "${CGI_group}" = "" ] && retjson 1 "INV_GROUP"
    [ "${CGI_action}" = "edit_policy" ] && action="set id=${CGI_oldid} newid=${CGI_polno} " || action="add id=${CGI_polno}"

    [ "${CGI_inip}" = "" ] && CGI_inip="any"
    [ "${CGI_outip}" = "" ] && CGI_outip="any"
    [ "${CGI_priority}" = "" ] && CGI_priority=0
    [ "${CGI_natip}" = "" ] && CGI_natip="0"
    [ "${CGI_tos}" = "" ] && CGI_tos="0"
    [ "${CGI_priority}" = "" ] && CGI_priority="0"
    [ "${CGI_iprate}" = "" ] && CGI_iprate="0"
    [ "${CGI_hasms}" = "" ] && CGI_hasms="0"
    [ "${CGI_qqcnt}" = "" ] && CGI_qqcnt="0"
    [ "${CGI_appnot}" = "" ] && CGI_appnot="0"
    [ "${CGI_ttl}" = "" -o "${CGI_ttl}" = "0" ] && CGI_ttl="0-255"
    [ "${CGI_matchact}" = "continue" ] && next=1 || next=0

    if [ "${CGI_proto}" != "any" ]; then
        app="${CGI_appid}.${CGI_proto}"
    else
        app="${CGI_appid}"
    fi

    case "${CGI_pact}" in
        "route")
            CGI_pact="${CGI_pact}-${CGI_route_proxy}"
            [ "${CGI_nexthop}" != "" ] && CGI_pact="${CGI_pact}/${CGI_nexthop}"
            ;;
        "iwansr")
            [ "${CGI_nexthop}" = "" ] && retjson 1 "NO_NEXTHOP"
            CGI_pact="${CGI_pact}-${CGI_mirror_iwan}/${CGI_nexthop}"
            ;;
        "dup")
            CGI_pact="${CGI_pact}-${CGI_netif}"
            ;;
        "portfwd")
            CGI_pact="${CGI_pact}-${CGI_netif}"
            [ "${CGI_netif_vlan}" != "" -a "${CGI_netif_vlan}" != "0" ] && CGI_pact="${CGI_pact}/${CGI_netif_vlan}"
            ;;
        "iwanmir")
            CGI_pact="iwanmir-${CGI_mirror_iwan}"
            [ "${CGI_netif_vlan}" != "" -a "${CGI_netif_vlan}" != "0" ] && CGI_pact="${CGI_pact}/${CGI_netif_vlan}"
            ;;
        "pipe")
            CGI_pact="${CGI_pipe}"
            ;;
        "permit"|"deny")
            CGI_pact="${CGI_pact}"
            ;;
        "tap")
            CGI_pact="${CGI_pact}-${CGI_tap_group}"
            [ "${CGI_tap_vlan}" != "" -a "${CGI_tap_vlan}" != "0" ] && CGI_pact="${CGI_pact}/${CGI_tap_vlan}"
            ;;
        *)
            retjson 1 "INV_ACTION"
            ;;
    esac

    id=${CGI_polno}
    [ "${CGI_oldid}" != "" ] && id=${CGI_oldid}
    [ "${CGI_inpxy}" != "" -a "${CGI_inpxy}" != "any" ] && CGI_inif="${CGI_inif}/${CGI_inpxy}"

    cmdargs="${cmdargs} group=${CGI_group} bridge=${CGI_bridge} dir=${CGI_dir} macgid=${CGI_macgid}"
    cmdargs="${cmdargs} inport=${CGI_inport} outport=${CGI_outport} inip=${CGI_submit_srcip} outip=${CGI_submit_dstip}"
    cmdargs="${cmdargs} app=${app} action=${CGI_pact} iprate=${CGI_iprate} next=${next}"
    cmdargs="${cmdargs} inif=${CGI_inif} pktno=${CGI_pktno} pri=${CGI_priority} natip=${CGI_natip} appnot=${CGI_appnot}"
    cmdargs="${cmdargs} hasms=${CGI_hasms} qqcnt=${CGI_qqcnt} vlan=${CGI_vlan} ttl=${CGI_ttl} disable=${CGI_disable}"

    #TAP汾
    if [ "${TAP}" = "1" ]; then
        cmdargs="${cmdargs} vxlan=${CGI_vxlan_} mask_sip=${CGI_mask_sip} mask_dip=${CGI_mask_dip} mask_sport=${CGI_mask_sport} mask_dport=${CGI_mask_dport} mask_data=${CGI_mask_data}"
        cmdargs="${cmdargs} strip=${CGI_strip} dedup=${CGI_dedup} truncated=${CGI_truncated}"
        cmdargs="${cmdargs} ifname=${CGI_ifname}"
    else
        cmdargs="${cmdargs} ifname=${CGI_ifname}/${CGI_firstpxy}"
    fi

    if [ "${CGI_desc}" != "NULL" -o "${CGI_desc}" != "" ]; then
        [ "${PALANG}" = "en" ] && CGI_desc=`echo ${CGI_desc} | sed -r 's/ /\%20/g'`
        cmdargs="${cmdargs} desc=${CGI_desc}"
    fi

    if [ "${CGI_pact}" = "permit" ]; then
        cmdargs="${cmdargs} tos=${CGI_tos}"
    fi
    
    cmdargs="${cmdargs} soid=${CGI_soid}"
    errmsg=`${FLOWEYE} newpolicy ${action} ${cmdargs}`

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


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

    errmsg=`${FLOWEYE} newpolicy remove group=${CGI_group} id=${CGI_id}`

    if [ $? -ne 0 ]; then
        retjson 1 "ʧܣ${errmsg}"
    else
        sync_floweye "newpolicy remove group=${CGI_group} id=${CGI_id}"
        WEB_LOGGER "ɾƲ" "group=${CGI_group},id=${CGI_id}"
        retjson 0 "ɹ"
    fi
}


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

    errmsg=`${FLOWEYE} newpolicy config group=${CGI_group} disable=${CGI_id}`

    if [ $? -ne 0 ]; then
        retjson 1 "ʧܣ${errmsg}"
    else
        sync_floweye "newpolicy config group=${CGI_group} disable=${CGI_id}"
        WEB_LOGGER "Ʋ" "group=${CGI_group},id=${CGI_id}"
        retjson 0 "ɹ"
    fi
}


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

    errmsg=`${FLOWEYE} newpolicy config group=${CGI_group} enable=${CGI_id}`

    if [ $? -ne 0 ]; then
        retjson 1 "ʧܣ${errmsg}"
    else
        sync_floweye "newpolicy config group=${CGI_group} enable=${CGI_id}"
        WEB_LOGGER "Ʋ" "group=${CGI_group},id=${CGI_id}"
        retjson 0 "ɹ"
    fi
}


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

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


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

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


btnenable_policy()
{
    for id in `echo ${CGI_items} | tr ";" " "`
    do
        errmsg=`${FLOWEYE} newpolicy config group=${CGI_group} enable=${id}`
        [ $? -ne 0 ] && retjson 1 "ʧܣ${errmsg}"
        sync_floweye "newpolicy config group=${CGI_group} enable=${id}"
    done

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

get_policy_addr()
{
    #ж ip ip6 rng tbl mac pool acct
    case "$1" in
        ip,* | ip6,*)
            addr=$(echo "$1" | cut -d',' -f3)
        ;;

        rng,*)
            start_addr=$(echo "$1" | cut -d',' -f2)
            end_addr=$(echo "$1" | cut -d',' -f3)
            addr="${start_addr}-${end_addr}"
        ;;

        tbl,*)
            addr=$(echo "$1" | cut -d',' -f2)
        ;;

        mac,*)
            addr="mac.$(echo "$1" | cut -d',' -f2)"
        ;;

        pool,*)
            addr="pppoe.$(echo "$1" | cut -d',' -f2)"
        ;;
        acct,*)
            addr="acct.$(echo "$1" | cut -d',' -f3)"
        ;;
         *)
            addr=$1
        ;;
    esac

    echo -n ${addr}
}

deal_policy_para()
{   
    num=$((${num}+1))

    # 
    [ "${CGI_dir}" = "" ] && dir="${L_dir}" || dir="${CGI_dir}"
    [ "${CGI_proto}" = "" ] && proto="${L_proto}" || proto="${CGI_proto}"
    [ "${CGI_appid}" = "" ] && appid="${L_appid}" || appid="${CGI_appid}"
    pact=""
    cmdargs=""
    

    if [ "${proto}" != "any" ]; then
        app="${appid}.${proto}"
    else
        app="${appid}"
    fi

    [ "${CGI_submit_srcip}" = "" ] && inip=$(get_policy_addr "${L_inip}") || inip="${CGI_submit_srcip}"
    [ "${CGI_submit_dstip}" = "" ] && outip=$(get_policy_addr "${L_outip}") || outip="${CGI_submit_dstip}"
    [ "${CGI_priority}" = "" ] && priority="${L_priority}" || priority="${CGI_priority}"
    [ "${CGI_ifname}" = "" ] && ifname="${L_ifname}" || ifname="${CGI_ifname}"
    [ "${CGI_firstpxy}" = "" ] && firstpxy="${L_firstpxy}" || firstpxy="${CGI_firstpxy}"
    [ "${CGI_inif}" = "" ] && inif="${L_inif}" || inif="${CGI_inif}"
    [ "${CGI_inpxy}" = "" ] && inpxy="${L_inpxy}" || inpxy="${CGI_inpxy}"
    [ "${CGI_desc}" = "" ] && desc="${L_desc}" || desc="${CGI_desc}"
    [ "${CGI_matchact}" = "" ] && matchact="${L_matchact}" || matchact="${CGI_matchact}"

    case "${CGI_pact}" in
        "route")
            pact="${CGI_pact}-${CGI_route_proxy}"
            [ "${CGI_nexthop}" != "" ] && pact="${CGI_pact}/${CGI_nexthop}"
            ;;
        "iwansr")
            [ "${CGI_nexthop}" = "" ] && retjson 1 "NO_NEXTHOP"
            pact="${CGI_pact}-${CGI_mirror_iwan}/${CGI_nexthop}"
            ;;
        "dup")
            pact="${CGI_pact}-${CGI_netif}"
            ;;
        "portfwd")
            pact="${CGI_pact}-${CGI_netif}"
            [ "${CGI_netif_vlan}" != "" -a "${CGI_netif_vlan}" != "0" ] && pact="${CGI_pact}/${CGI_netif_vlan}"
            ;;
        "iwanmir")
            pact="iwanmir-${CGI_mirror_iwan}"
            [ "${CGI_netif_vlan}" != "" -a "${CGI_netif_vlan}" != "0" ] && pact="${CGI_pact}/${CGI_netif_vlan}"
            ;;
        "pipe")
            pact="${CGI_pipe}"
            ;;
        "permit"|"deny")
            pact="${CGI_pact}"
            ;;
        "tap")
            pact="${CGI_pact}-${CGI_tap_group}"
            [ "${CGI_tap_vlan}" != "" -a "${CGI_tap_vlan}" != "0" ] && pact="${CGI_pact}/${CGI_tap_vlan}"
            ;;
        *)
            pact="${L_action}"
            ;;
    esac

    cmdargs="${cmdargs} group=${CGI_group} id=${L_polno} app=${app} dir=${dir} inip=${inip} outip=${outip} pri=${priority} inif=${inif}/${inpxy} ifname=${ifname}/${firstpxy} action=${pact}"
    
    #[ "${CGI_submit_srcip}" != "" ] && cmdargs="${cmdargs} inip=${CGI_submit_srcip}"
    #[ "${CGI_submit_dstip}" != "" ] && cmdargs="${cmdargs} outip=${CGI_submit_dstip}"
    #[ "${CGI_priority}" != "" ] && cmdargs="${cmdargs} pri=${CGI_priority}"
    #[ "${CGI_inpxy}" != "" -a "${CGI_inpxy}" != "any" ] && cmdargs="${cmdargs} inif=${CGI_inif}/${CGI_inpxy}"
    [ "${matchact}" = "continue" ] && cmdargs="${cmdargs} next=1"
    [ "${matchact}" = "stop" ] && cmdargs="${cmdargs} next=0"

    if [ "${desc}" != "NULL" -o "${desc}" != "" ]; then
        [ "${PALANG}" = "en" ] && desc=`echo ${desc} | sed -r 's/ /\%20/g'`
        cmdargs="${cmdargs} desc=${desc}"
    fi
    
    params_list="bridge;macgid;inport;outport;iprate;ifname;natip;appnot;hasms;qqcnt;vlan;ttl;soid;disable"

    #TAP汾
    if [ "${TAP}" = "1" ]; then
         params_list="${params_list};strip;dedup;truncated"
    fi

    if [ "${CGI_pact}" = "permit" -o "${pact}" = "permit"  ]; then
        params_list="${params_list};tos" 
    fi
    
    for para in `echo ${params_list} | tr ";" " "`
    do
        eval name="\$CGI_${para}"
        eval Lname="\$L_${para}"
        if [ "${name}" != "" ]; then
            cmdargs="${cmdargs} ${para}=${name}"
        else
            cmdargs="${cmdargs} ${para}=${Lname}"
        fi
    done

    errmsg=`${FLOWEYE} newpolicy set ${cmdargs}`
    [ $? -ne 0 ] && retjson 1 "${num}${errmsg}"
    sync_floweye "newpolicy set ${cmdargs}"
}


batch_edit_policy()
{    
   [ "${CGI_group}" = "" ] && retjson 1 "INV_GROUP"

    for id in `echo ${CGI_items} | tr ";" " "`
    do
        for line in `${FLOWEYE} newpolicy get group=${CGI_group} id=${id}`
		do
            eval "L_${line}"
		done
        deal_policy_para
    done

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


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

    "rmv_group_schtime")
        action_check
        rmv_group_schtime
        ;;

    "add_group_schtime")
        action_check
        add_group_schtime
        ;;

    "load_addgroup_env")
        retjson 0 "OK" "`load_addgroup_env`"
        ;;

    "add_group"|"edit_group"|"copy_group")
        action_check
        add_group
        ;;

    "remove_group")
        action_check
        remove_group
        ;;
        
    "get_policy")
        retjson 0 "OK" "`get_policy`"
        ;;
        
    "list_group")
        retjson 0 "OK" "`list_group`"
        ;;

    "load_group_list")
        retjson 0 "OK" "`load_group_list`"
        ;;

    "move_group")
        action_check
        move_group
        ;;

    "export_group")
        action_check
        export_group
        ;;
    
    "import_group")
        action_check
        import_group
        ;;

    "set_enable_group")
        action_check
        set_enable_group
        ;;

    "set_stop_group")
        action_check
        set_stop_group
        ;;

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

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

    "remove_policy")
        action_check
        remove_policy
        ;;

    "disable_policy")
        action_check
        disable_policy
        ;;

    "enable_policy")
        action_check
        enable_policy
        ;;

    "btnremove_policy")
        action_check
        btnremove_policy
        ;;

    "btndisable_policy")
        action_check
        btndisable_policy
        ;;

    "btnenable_policy")
        action_check
        btnenable_policy
        ;;
    
    "batch_edit_policy")
        action_check
        batch_edit_policy
        ;;

    *)
        retjson 1 "UNKNOW_ACTION"
        ;;
esac
