#!/usr/bin/bash

# Note: in order to cleanup the full configuration, *before* running nscrub, run 'redis-cli FLUSHDB'

# Default settings
USER=admin
PASSWORD=admin
HOST=127.0.0.1
PORT=8880
DEFAULT_TYPE=web
CONFIG_PATH=/usr/share/nscrub/basic-conf

BIN=$0

function help() {
	echo "Add a new target to nscrub using a basic configuration"
	echo "Usage:"
	echo "$BIN [options] <target id> <subnet> <target type>"
	echo "Supported types:"
	ls ${CONFIG_PATH} | cut -d "." -f 1
	echo "Options:"
	echo "-u <user>"
	echo "-p <password>"
	echo "-H <host>"
	echo "-P <port>"
	echo "Example:"
	echo "$BIN WEBSERVER 192.168.1.1/32 web"
	exit
}

function createConf() {
	if [ -z "$1" ] || [ -z "$2" ]; then
		help
	fi
	TARGET_ID=$1
	TARGET_SUBNET=$2

	if [ -z "$3" ]; then
		TYPE=${DEFAULT_TYPE}
	else
		TYPE=$3
	fi

	CONFIG_FILE=${CONFIG_PATH}/${TYPE}.conf
	if [ ! -f "$CONFIG_FILE" ]; then
		echo "Unsupported type '${TYPE}'"
		exit
	fi

	echo "Creating configuration for target '$1' with subnet '$2' using '$TYPE' settings"

	CONFIG_FILE_EVAL=/tmp/nscrub-conf-cli.tmp
	TARGET_ID=${TARGET_ID//./_}
	TARGET_SUBNET=$(sed 's/[\*\.\/]/\\&/g' <<<"$TARGET_SUBNET")

	sed -e "s/TARGET_ID/${TARGET_ID}/" -e "s/TARGET_SUBNET/${TARGET_SUBNET}/" ${CONFIG_FILE} > ${CONFIG_FILE_EVAL}

	cat ${CONFIG_FILE_EVAL} | nscrub-cli -d -a ${USER}:${PASSWORD} -c ${HOST}:${PORT}

	rm $CONFIG_FILE_EVAL
}

while getopts ":u:p:hH:P:" opt; do
  case ${opt} in
    u)
      USER=$OPTARG
      ;;
    p)
      PASSWORD=$OPTARG
      ;;
    H)
      HOST=$OPTARG
      ;;
    P)
      PORT=$OPTARG
      ;;
    h)
      help
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    :)
      echo "Option -$OPTARG requires an argument." >&2
      exit 1
      ;;
  esac
done
shift $((OPTIND-1))

case $1 in
help)
help
;;
*)
createConf $1 $2 $3
;;
esac

