#!/bin/sh

. ../common/ajax_common


list_proxy_rule()
{
    ${FLOWEYE} arpxy list | grep -i "${CGI_keyword}" | awk \
    'BEGIN{
        dot = "";
        printf "[";
    }{
        col = 1;

        printf "%s{", dot;
        printf "\"id\":\"%s\"", $(col++);
        printf ",\"ifname\":\"%s\"", $(col++);
        printf ",\"disable\":\"%s\"", $(col++);
        printf ",\"ip\":\"%s\"", $(col++);
        printf ",\"vlan\":\"%s\"", $(col++);
        printf ",\"desc\":\"%s\"", $(col++);
        printf "}";
        if(dot == "") dot = ",";
    }END{
        printf "]";
    }'
}


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


load_policy_env()
{
    . ../common/ajax_object_lib

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

    printf "}"
}


add_proxy_rule()
{
    if [ "${CGI_action}" = "edit_proxy_rule" ]; then
        cmdargs="set"
    else
        cmdargs="add"
    fi

    cmdargs="${cmdargs} id=${CGI_id} inif=${CGI_inif} ip=${CGI_submit_srcip}"
    cmdargs="${cmdargs} vlan=${CGI_vlan} desc=${CGI_desc}"

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

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


rmv_proxy_rule()
{
    cmdargs="remove id=${CGI_id}"
    errmsg=`${FLOWEYE} arpxy ${cmdargs}`

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


disable_proxy_rule()
{
    cmdargs="disable id=${CGI_id}"
    errmsg=`${FLOWEYE} arpxy ${cmdargs}`

    if [ $? -ne 0 ]; then
        retjson 1 "ʧ:${errmsg}"
    else
        sync_floweye "arpxy ${cmdargs}"
        WEB_LOGGER "ARP" "id=${CGI_id}"
        retjson 0 "ɹ"
    fi
}


enable_proxy_rule()
{
    cmdargs="enable id=${CGI_id}"
    errmsg=`${FLOWEYE} arpxy ${cmdargs}`

    if [ $? -ne 0 ]; then
        retjson 1 "ʧ:${errmsg}"
    else
        sync_floweye "arpxy ${cmdargs}"
        WEB_LOGGER "ARP" "id=${CGI_id}"
        retjson 0 "ɹ"
    fi
}


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

    WEB_LOGGER "ɾARP" "ids=${CGI_items}"
    retjson 0 "ɹ"
}


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

    WEB_LOGGER "ARP" "ids=${CGI_items}"
    retjson 0 "ɹ"
}


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

    WEB_LOGGER "ARP" "ids=${CGI_items}"
    retjson 0 "ɹ"
}


list_proxy_user()
{
    ${FLOWEYE} arpxy list type=arp | grep -i "${CGI_keyword}" | awk \
    'BEGIN{
        dot = "";
        printf "[";
    }{
        col = 1;

        printf "%s{", dot;
        printf "\"mac\":\"%s\"", $(col++);
        printf ",\"ip\":\"%s\"", $(col++);
        printf ",\"vlan1\":\"%s\"", $(col++);
        printf ",\"vlan2\":\"%s\"", $(col++);
        printf ",\"ifname\":\"%s\"", $(col++);
        printf ",\"desc\":\"%s\"", $(col++);
        printf "}";
        if(dot == "") dot = ",";
    }END{
        printf "]";
    }'
}


remove_proxy_user()
{
    errmsg=`${FLOWEYE} arpxy remove ${CGI_ips}`

    if [ $? -ne 0 ]; then
        retjson 1 "ʧ"
    else
        WEB_LOGGER "ɾARPû" "${CGI_ips}"
        sync_floweye "arpxy remove ${CGI_ips}"
        retjson 0 "ɹ"
    fi
}


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

    "load_policy_env")
        retjson 0 "OK" "`load_policy_env`"
        ;;

    "add_proxy_rule"|"edit_proxy_rule")
        action_check
        add_proxy_rule
        ;;

    "rmv_proxy_rule")
        action_check
        rmv_proxy_rule
        ;;

    "disable_proxy_rule")
        action_check
        disable_proxy_rule
        ;;

    "enable_proxy_rule")
        action_check
        enable_proxy_rule
        ;;

    "btn_remove_proxy")
        action_check
        btn_remove_proxy
        ;;

    "btn_disable_proxy")
        action_check
        btn_disable_proxy
        ;;

    "btn_enable_proxy")
        action_check
        btn_enable_proxy
        ;;

    "list_proxy_user")
        retjson 0 "OK" "`list_proxy_user`"
        ;;

    "remove_proxy_user")
        action_check
        remove_proxy_user
        ;;
        
    *)
        retjson 1 "UNKNOW_ACTION"
        ;;
        
esac
