#!/bin/sh

. ../common/ajax_common


if [ "${PALANG}" = "en" ]; then
	LANG001="Error"   #ʧ
	LANG002="Success" #ɹ
    LANG003="Operation completed"    #
fi

load_nat66_policy()
{
    printf "["

    ${FLOWEYE} nat66 list

    printf "]"
}


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


loadd_addpolicy_env()
{
    . ../common/ajax_object_lib

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


add_nat66_policy()
{
    cmdargs="id=${CGI_id} src=${CGI_pfx_src} snat=${CGI_pfx_snat} pfxlen=${CGI_pfxlen} outpxy=${CGI_outpxy} desc=${CGI_desc}"
    errmsg=`${FLOWEYE} nat66 add ${cmdargs}`

    if [ $? -ne 0 ]; then
        retjson 1 "${LANG001:=ʧ}:${errmsg}"
    else
        sync_floweye "nat66 add ${cmdargs}"
        WEB_LOGGER "Ӿ̬NAT66" "${cmdargs}"
        retjson 0 "${LANG002:=ɹ}"
    fi
}


edit_nat66_policy()
{
    cmdargs="id=${CGI_id} src=${CGI_pfx_src} snat=${CGI_pfx_snat} pfxlen=${CGI_pfxlen} outpxy=${CGI_outpxy} desc=${CGI_desc}"
    errmsg=`${FLOWEYE} nat66 set ${cmdargs}` 

    if [ $? -ne 0 ]; then
        retjson 1 "${LANG001:=ʧ}:${errmsg}"
    else
        sync_floweye "nat66 add ${cmdargs}"
        WEB_LOGGER "༭̬NAT66" "${cmdargs}"
        retjson 0 "${LANG002:=ɹ}"
    fi
}


rmv_nat66_policy()
{
    [ "${CGI_id}" = "" ] && retjson 1 "NO_ID"

    errmsg=`${FLOWEYE} nat66 remove id=${CGI_id}`

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


btnrmv_nat66_policy()
{
    for item in ${CGI_items}
    do
        errmsg=`${FLOWEYE} nat66 remove id=${item}`
        [ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}:${errmsg}"
        sync_floweye "nat66 remove id=${item}"
    done

    WEB_LOGGER "ɾNAT66" "id=${CGI_items}"
    retjson 0 "${LANG002:=ɹ}"
}


enable_nat66_policy()
{
    [ "${CGI_id}" = "" ] && retjson 1 "NO_ID"

    errmsg=`${FLOWEYE} nat66 set id=${CGI_id} disable=0`

    if [ $? -ne 0 ]; then
        retjson 1 "${LANG001:=ʧ}:${errmsg}"
    else
        sync_floweye "nat66 enable id=${CGI_id}"
        WEB_LOGGER "þ̬NAT66" "id=${CGI_id}"
        retjson 0 "${LANG002:=ɹ}"
    fi
}


btnenable_nat66_policy()
{
    for item in ${CGI_items}
    do
        errmsg=`${FLOWEYE} nat66 set id=${item} disable=0`
        [ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}:${errmsg}"
        sync_floweye " nat66 set id=${item} disable=0"
    done

    WEB_LOGGER "NAT66" "id=${CGI_items}"
    retjson 0 "${LANG002:=ɹ}"
}


disable_nat66_policy()
{
    [ "${CGI_id}" = "" ] && retjson 1 "NO_ID"

    errmsg=`${FLOWEYE} nat66 set id=${CGI_id} disable=1`

    if [ $? -ne 0 ]; then
        retjson 1 "${LANG001:=ʧ}:${errmsg}"
    else
        sync_floweye "nat66 set id=${CGI_id} disable=1"
        WEB_LOGGER "þ̬NAT66" "id=${CGI_id}"
        retjson 0 "${LANG002:=ɹ}"
    fi
}


btndisable_nat66_policy()
{
    for item in ${CGI_items}
    do
        errmsg=`${FLOWEYE} nat66 set id=${item} disable=1`
        [ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}:${errmsg}"
        sync_floweye " nat66 set id=${item} disable=1"
    done

    WEB_LOGGER "NAT66" "id=${CGI_items}"
    retjson 0 "${LANG002:=ɹ}"
}


export_nat66_policy()
{
    file_name="NAT66.conf"
    file_path="${WEB_DOWNLOAD}/${file_name}"

    grep "^nat66 " ${PGETC}/panabit.conf | cut -d" " -f2- > ${file_path}

    WEB_LOGGER "NAT66"
    retjson 0 "OK" "\"${file_name}\""
}


import_nat66_policy()
{
    errlist="[\"\""
    donenum=0

    while read line
    do
        pid=`echo ${line} | cut -d" " -f1`
        errmsg=`${FLOWEYE} nat66 add ${line}`
        
        if [ $? -eq 0 ]; then
            donenum=$((${donenum} + 1))
            continue
        fi

        if [ "${errmsg}" = "EXIST" -a "${CGI_ignore}" = "1" ]; then
            errmsg=`${FLOWEYE} nat66 set ${line}`
            if [ $? -ne 0 ]; then
                errlist="${errlist},\"${pid}\""
            else
                donenum=$((${donenum} + 1))
            fi
        else
            errlist="${errlist},\"${pid}\""
        fi
    done << EOF
`cat ${CGI_file} | tr -ds '\r' '' `
EOF

    errlist="${errlist}]"
    
    rm -rf ${CGI_file}
    WEB_LOGGER "NAT66"
    retjson 0 "${LANG003:=}" "{\"done\":${donenum},\"errlist\":${errlist}}"
}


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

    "loadd_addpolicy_env")
        retjson 0 "OK" "`loadd_addpolicy_env`"
        ;;

    "add_nat66_policy")
        action_check
        add_nat66_policy
        ;;

    "edit_nat66_policy")
        action_check
        edit_nat66_policy
        ;;

    "rmv_nat66_policy")
        action_check
        rmv_nat66_policy
        ;;

    "btnrmv_nat66_policy")
        action_check
        btnrmv_nat66_policy
        ;;

    "enable_nat66_policy")
        action_check
        enable_nat66_policy
        ;;

    "btnenable_nat66_policy")
        action_check
        btnenable_nat66_policy
        ;;

    "disable_nat66_policy")
        action_check
        disable_nat66_policy
        ;;

    "btndisable_nat66_policy")
        action_check
        btndisable_nat66_policy
        ;;

    "export_nat66_policy")
        action_check
        export_nat66_policy
        ;;

    "import_nat66_policy")
        action_check
        import_nat66_policy
        ;;

    *)
        retjson 1 "UNKNOW_ACTION"
        ;;

esac
