#!/bin/sh

. ../common/ajax_common

if [ "${PALANG}" = "en" ]; then
	LANG001="Error"		#ʧ
	LANG002="Success"	#ɹ
	LANG003="Add_Group_URL"	#Ⱥ
	LANG004="Del_Group_URL"	#ɾȺ
	LANG005="Del_Group_URL"	#ɾȺ
	LANG006="Add_Group_URL"	#Ⱥ
	LANG007="Import_Group_URL"	#Ⱥ
	LANG008="Delete_Group_URL"	#Ⱥɾ
	LANG009="Delete_Group_URL"	#ɾȺ
	LANG010="num"	#ɾ
fi


list_dnsgrp()
{
    # type id name num summary
    ${FLOWEYE} dns listgrp | grep -i "${CGI_keyword}" | awk \
    'BEGIN{
        dot = "";
        printf "[";
    }{
        if($1 == "sys") next;

        col = 1;
        printf "%s{", dot;
        printf "\"type\":\"%s\",", $1;
        printf "\"id\":\"%s\",", $2;
        printf "\"name\":\"%s\",", $3;
        printf "\"num\":\"%s\"", $4;
        printf "}";
        if(dot == "") dot = ",";
    }END{
        printf "]";
    }'
}


get_dnsgrp_bydns()
{
    end=$((${CGI_page} * ${CGI_limit}))
    start=$((${end} - ${CGI_limit}))

    ${FLOWEYE} dnsgrp dump dns=${CGI_keyword} | awk \
    -v end=${end} -v start=${start} \
    'BEGIN{
        dot = "";
        row = 0;
        printf "{\"data\":[";
    }{
        row++;
        if(row > end || row < start) next;

        printf "%s", dot;
        printf "{";
        printf "\"row\":\"%s\"", row;
        printf ",\"id\":\"%s\"", $1;
        printf ",\"grpname\":\"%s\"", $2;
        printf ",\"name\":\"%s\"", $3;
        printf "}";
        if(dot == "") dot = ",";
    }END{
        printf "],\"total\":\"%s\"}", row;
    }'
}


get_dnsgrp_byid()
{
    end=$((${CGI_page} * ${CGI_limit}))
    start=$((${end} - ${CGI_limit}))

    grpname=`${FLOWEYE} dns getgrp ${CGI_id} | grep "^name=" | cut -d"=" -f2`

    ${FLOWEYE} dns dumpgrp ${CGI_id} | grep -i "${CGI_keyword}" | awk \
    -v end=${end} -v start=${start} -v id=${CGI_id} -v grpname=${grpname} \
    'BEGIN{
        dot = "";
        row = 0;
        printf "{\"data\":[";
    }{
        row++;
        if(row > end || row < start) next;

        printf "%s", dot;
        printf "{";
        printf "\"row\":\"%s\"", row;
        printf ",\"id\":\"%s\"", id;
        printf ",\"grpname\":\"%s\"", grpname;
        printf ",\"name\":\"%s\"", $1;
        printf "}";
        if(dot == "") dot = ",";
    }END{
        printf "],\"total\":\"%s\"}", row;
    }'
}


get_dnsgrp()
{
    if [ "${CGI_id}" = "" -a "${CGI_keyword}" != "" ]; then
        get_dnsgrp_bydns
    elif [ "${CGI_id}" != "" ]; then
        get_dnsgrp_byid
    else
        printf "{\"total\":0,\"data\":[]}"
        return
    fi
}


add_dnsgrp()
{
    errmsg=`${FLOWEYE} dns addgrp ${CGI_name}`

    if [ "$?" != "0" ]; then
        retjson 1 "${LANG001:=ʧ}${errmsg}"
    else
        sync_floweye "dns addgrp ${CGI_name}"
        WEB_LOGGER "${LANG003:=Ⱥ}" "dnsgrp=${CGI_name}"
        retjson 0 "${LANG002:=ɹ}"
    fi
}


rmv_dnsgrp()
{
    errmsg=`${FLOWEYE} dns rmvgrp ${CGI_id}`

    if [ "$?" != "0" ]; then
        retjson 1 "${LANG001:=ʧ}${errmsg}"
    else
        sync_floweye "dns rmvgrp ${CGI_id}"
        WEB_LOGGER "${LANG004:=ɾȺ}" "dnsgrp=${CGI_name}"
        retjson 0 "${LANG002:=ɹ}"
    fi
}


btnrmv_dnsgrp()
{
    for id in `echo ${CGI_items} | tr ";" " "`
    do
        errmsg=`${FLOWEYE} dns rmvgrp ${id}`
        [ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}${errmsg}"
        sync_floweye "dns rmvgrp ${id}"
    done

    WEB_LOGGER "${LANG005:=ɾȺ}" "items=${CGI_items}"
	retjson 0 "${LANG002:=ɹ}"
}


add_grpurl()
{
    if [ "${CGI_url}" != "" ] ;then
        errmsg=`${FLOWEYE} dns add ${CGI_id} "${CGI_url}"`
        [ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}${errmsg}"
        sync_floweye "dns add ${CGI_id} ${CGI_url}"
        WEB_LOGGER "${LANG006:=Ⱥ}" "dnsgrp=${CGI_name} url=${CGI_url}"
    fi

    if [ "${CGI_file}" != "" ]; then
        ttfile="${TMPDIR}/`date +%s`.$$"

        if [ "${CGI_type}" = "0" ]; then
            ${FLOWEYE} dns dumpgrp ${CGI_id} > ${ttfile}
        fi
        
        cat ${CGI_file} | tr -ds '\r' '' >> ${ttfile}

        errmsg=`${FLOWEYE} dns loadfile ${CGI_id} ${ttfile}`
        [ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}${errmsg}"

        rm -rf "${CGI_file}"
        rm -rf "${ttfile}"
        
        WEB_LOGGER "${LANG007:=Ⱥ}" "dnsgrp=${CGI_name} url=${CGI_url}"
    fi

	retjson 0 "${LANG002:=ɹ}"
}


confirm_build_output()
{
    dot=""

    printf "["

    for id in $1
    do
        printf "${dot}\"${id}\""
        [ "${dot}" = "" ] && dot=","
    done

    printf "]"
}


confirm_find_policy()
{
    grep "^${1}" ${PGETC}/panabit.conf | awk -v tid=${CGI_id} -v obj=$2 \
    'BEGIN{
        dot = "";
        printf "[";
    }{
        group = "";
        pid = "";
        include = 0;
        
        for(i = 2; i <= NF; i++){
            
            split($i, item, "=");
            
            # ȡءơHTTPܿصĲ
            if(item[1] == "group"){
                group = item[2];
                continue;
            }

            # ȡID
            if(item[1] == "id"){
                pid = item[2];
                continue;
            }
            
            if(item[1] == "dns" && item[2] == tid){
                include = 1;
                break;
            }
            
            if(item[1] != obj)
                continue;

            if(item[2] == "dns."tid){
                include = 1;
                break;
            }
            
            split(item[2], val, ",");

            for(x = 1; x <= length(val); x++){
                if(val[x] == "dns."tid){
                    include = 1;
                    break;
                }
            }
        }

        if(include == 0)
            next;

        if(group != "")
            printf "%s\"%s.%s\"", dot, group, pid;
        else
            printf "%s\"%s\"", dot, pid;

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


confirm_rmv_info()
{
    # ·
    route=`confirm_find_policy "rtp" "dst"`
    
    # DNSܿ
    #dnsrule id=100 inip=1 outip=any dns=0 bridge=0 action=pass
    #dnsrule id=5555 inip=any outip=1 dns=1 bridge=0 action=pass
    dnsctl=`confirm_find_policy "dnsrule" "outip"`

    # ز
    rule=`confirm_find_policy "rule" "outip"`
    newrule=`confirm_find_policy "newrule" "outip"`

    # ܿ
    clpolicy=`confirm_find_policy "clpolicy" "outip"`

    #urlpolicy group=test id=123 pool=0 inip=1 dst=any dns=0 ext=0 action=accept method=any
    #urlpolicy group=test id=456 pool=0 inip=any dst=1 dns=1 ext=0 action=accept method=any
    urlpolicy=`confirm_find_policy "urlpolicy" "dst"`
    
    #dnrt id=500 dns=1 pxy=iWAN-to˾
    dnrt=`confirm_find_policy "dnrt" "dns"`

    printf "{"
    printf "\"route\":${route}"
    printf ",\"dnsctl\":${dnsctl}"
    printf ",\"rule\":${rule}"
    printf ",\"newrule\":${newrule}"
    printf ",\"clpolicy\":${clpolicy}"
    printf ",\"urlpolicy\":${urlpolicy}"
    printf ",\"dnrt\":${dnrt}"
    printf "}"
}


rmv_grpurl()
{
    errmsg=`${FLOWEYE} dns remove ${CGI_id} "${CGI_name}"`

    if [ "$?" != "0" ]; then
		retjson 1 "${LANG001:=ʧ}${errmsg}"
    else
        sync_floweye "dns remove ${CGI_id} ${CGI_name}"
        WEB_LOGGER "${LANG008:=Ⱥɾ}" "dnsgrp=${CGI_id} url=${CGI_name}"
		retjson 0 "${LANG002:=ɹ}"
    fi
}


btnrmv_grpurl()
{
    num=0

    for url in `echo ${CGI_items} | tr ";" " "`
    do
        errmsg=`${FLOWEYE} dns remove ${CGI_id} ${url}`
        [ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}${errmsg}"
        sync_floweye "dns remove ${CGI_id} ${url}"
        num=$((${num}+1))
    done

    WEB_LOGGER "${LANG009:=ɾȺ}" "${LANG010:=ɾ}=${num}"
	retjson 0 "${LANG002:=ɹ}"
}


export_dnsgrp()
{
    file_name="URLGroup_${CGI_name}.txt"
    file_path="${WEB_DOWNLOAD}/${file_name}"

    mkdir -p ${WEB_DOWNLOAD}
    ${FLOWEYE} dns dumpgrp ${CGI_id} > ${file_path}

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


case "${CGI_action}" in
    "list_dnsgrp")
        retjson 0 "OK" "`list_dnsgrp`"
        ;;
    
    "get_dnsgrp")
        retjson 0 "OK" "`get_dnsgrp`"
        ;;
    
    "add_dnsgrp")
        action_check
        add_dnsgrp
        ;;

    "rmv_dnsgrp")
        action_check
        rmv_dnsgrp
        ;;

    "btnrmv_dnsgrp")
        action_check
        btnrmv_dnsgrp
        ;;

    "add_grpurl")
        action_check
        add_grpurl
        ;;
    
    "confirm_rmv_info")
        retjson 0 "OK" "`confirm_rmv_info`"
        ;;

    "rmv_grpurl")
        action_check
        rmv_grpurl
        ;;

    "btnrmv_grpurl")
        action_check
        btnrmv_grpurl
        ;;

    "export_dnsgrp")
        action_check
        export_dnsgrp
        ;;

    *)
        retjson 1 "UNKNOW_ACTION"
        ;;
esac
