#!/bin/sh

module_name=alterator-ddos
po_domain="$module_name"
alterator_api_version=1

. alterator-sh-functions
. shell-config
. shell-quote
. alterator-net-functions

DDOS_DEFLATE_CONF=/etc/ddos-deflate/ddos.conf
DDOS_DEFLATE_WHITELIST=/etc/ddos-deflate/ignore.ip.list
DDOS_DEFLATE_CRON=/etc/cron.d/ddos-deflate

get_state()
{
	if [ -e "$DDOS_DEFLATE_CRON" ];
	then
		write_bool_param state true
	else
		write_bool_param state false
	fi
}

set_state()
{
	[ -n "$in_state" ] || return

	if [ "$in_state" = '#f' ];
	then
		[ -e "$DDOS_DEFLATE_CRON" ] && rm "$DDOS_DEFLATE_CRON"
	else
		[ -e "$DDOS_DEFLATE_CRON" ] || cat << EOF > "$DDOS_DEFLATE_CRON"
SHELL=/bin/sh
0-59/1 * * * * root /usr/sbin/ddos-deflate >/dev/null 2>&1
EOF
	fi
}

_get_value()
{
	local name="$1"

	[ -n "$name" ] || return
	[ -r "$DDOS_DEFLATE_CONF" ] || return

	echo "$(grep -m 1 "^[ \t]*$name[ \t]*=.*$" "$DDOS_DEFLATE_CONF" | sed "s/^[ \t]*$name[ \t]*=[ \t]*//" | sed 's/[ \t]*$//')"
}

get_values()
{
	write_string_param "NO_OF_CONNECTIONS" "$(_get_value "NO_OF_CONNECTIONS")"
	write_string_param "BAN_PERIOD" "$(_get_value "BAN_PERIOD")"
	write_string_param "EMAIL_TO" "$(_get_value "EMAIL_TO" | sed 's/"//g')"
}

_set_value()
{
	local name="$1"
	local value="$2"

	[ -n "$name" ] || return
	[ -w "$DDOS_DEFLATE_CONF" ] || return

	if grep "^[ \t]*$name[ \t]*=.*$" "$DDOS_DEFLATE_CONF" >/dev/null 2>&1;
	then
		sed -i "s/^[ \t]*$name[ \t]*=.*$/$name=$value/" "$DDOS_DEFLATE_CONF"
	else
		echo "$name=$value" >> "$DDOS_DEFLATE_CONF"
	fi
}

set_values()
{
	_set_value "NO_OF_CONNECTIONS" "$in_NO_OF_CONNECTIONS"
	_set_value "BAN_PERIOD" "$in_BAN_PERIOD"
	_set_value "EMAIL_TO" "\"$in_EMAIL_TO\""
}

read_whitelist()
{
    sed -r -n '/^[[:digit:].]+/p' "$DDOS_DEFLATE_WHITELIST" | write_enum
}

add_whitelist_ip()
{
    [ -n "$in_ip_addr" ] || return 0
    if ! valid_ipv4addr "$in_ip_addr"; then
        write_error "`_ "Invalid IP address:"` $in_ip_addr"
        return 1
    fi
    grep -qs "^$(quote_sed_regexp "$in_ip_addr")" "$DDOS_DEFLATE_WHITELIST" ||
        echo "$in_ip_addr" >>"$DDOS_DEFLATE_WHITELIST"
}

del_whitelist_ip()
{
    [ -n "$in_ip_addr" -a "$in_ip_addr" != '#f' ] || return 0
    sed -i "/^$(quote_sed_regexp "$in_ip_addr")/d" "$DDOS_DEFLATE_WHITELIST"
}

alterator_export_proc get_state
alterator_export_proc set_state
alterator_export_proc get_values
alterator_export_proc set_values
alterator_export_proc read_whitelist
alterator_export_proc add_whitelist_ip
alterator_export_proc del_whitelist_ip

message_loop
