#!/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_rmv_info()
{
    PA_CONF="${PGETC}/panabit.conf"

    route=`grep "^rtp " ${PA_CONF} | grep -E "dst.*[,=]+dns.${CGI_id}([[:space:]]|,)" | cut -d" " -f2 | cut -d"=" -f2`
    
    #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=`grep "^dnsrule " ${PA_CONF} | grep -E "(outip|dns).*[,=]+(dns.${CGI_id}|${CGI_id})([[:space:]]|,)" | cut -d" " -f2 | cut -d"=" -f2`

    #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=`grep "^urlpolicy " ${PA_CONF} | grep " dns=${CGI_id} " | awk '{
        split($2, g, "=");
        split($3, p, "=");
        printf "%s.%s\n", g[2], p[2];
    }'`

    dnrt=`grep "^dnrt " ${PA_CONF} | grep " dns=${CGI_id} " | cut -d" " -f2 | cut -d"=" -f2`

    printf "{"
    printf "\"route\":`confirm_build_output \"${route}\"`"
    printf ",\"dnsctl\":`confirm_build_output \"${dnsctl}\"`"
    printf ",\"urlpolicy\":`confirm_build_output \"${urlpolicy}\"`"
    printf ",\"dnrt\":`confirm_build_output \"${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
