#!/bin/bash

# **************************************************************************
# *                                                                        *
# *  Pointtools v.0.3 by Alexey Khromov AKA zxalexis AKA 2:5030/723        *
# *                                                                        *
# **************************************************************************
# *                                                                        *
# * pointdel - delete point from Links, Passwords and Userlist files       *
# *     identified by aka (-a) or pointnum (-p)                            *
# *                                                                        *
# **************************************************************************


# --------------------------------------------------------------------------
# Here comes a script
# --------------------------------------------------------------------------

# Initialize variables
cmdaka=""
cmdpnt=""
cmdstr=""
cmdlg=""
cmdag=""
cmdpass=""
cmdins=""
cmdyes=""
cmdfind=""

NMSBASE=""
FIDOBASE=""

if [ -f /etc/fidonms ]; then
    source /etc/fidonms
fi
if [ -z "$NMSBASE" ]; then
    #Try to guess
    NMSBASE=/opt/fidonms
fi
if [ -z "$FIDOBASE" ]; then
    FIDOBASE=/var/spool/ftn
fi

# Read parameters
while [ -n "$1" ]
do
        case "$1" in
                -f)	cfgfile="$2"
			shift;;
		-a)     cmdaka="$2"
                        shift;;
                -p)     cmdpnt="$2"
                        shift;;
                -y)     cmdyes="1";;
                *)      cmdusage="1";;
        esac
        shift
done

if [[ "${cmdusage}" = "1" ]]; then
        echo -ne "Usage: \n\
pointdel {-f cfgfile} {-y} [-p <pointnum>| -a <pointaka>]\n\
-y switch for silent operation\n"
        exit -2
fi


pwdsource=${BASH_SOURCE[0]}
while [ -L "$pwdsource" ]; do
        pwddir=$( cd -P "$( dirname "$pwdsource" )" > /dev/null 2>&1 && pwd )
        pwdsource=$( readlink "$pwdsource" )
        [[ $pwdsource != /* ]] && pwdsource=$pwddir/$pwdsource
done
pwddir=$( cd -P "$( dirname "$pwdsource" )" > /dev/null 2>&1 && pwd )

if [[ -z ${cfgfile} ]]; then
        if [[ -f "${NMSBASE}/etc/pointcfg" ]]; then
                cfgfile="${NMSBASE}/etc/pointcfg"
        elif [[ -f "/etc/pointcfg" ]]; then
                cfgfile="/etc/pointcfg"
        elif [[ -f "$pwddir/etc/pointcfg" ]]; then
                cfgfile="$pwddir/etc/pointcfg"
        else
                echo "Config file not found. Please specify one"
                exit -2
        fi
fi


source ${cfgfile}


FCONFIG=${FIDOCONFIG}

if [ -f ${FIDOCONFIG} ];
then
    AKA=$(grep -ie ^Address ${FIDOCONFIG}| head -n1 | awk -F'[ @]' '{ print $2 }')
else
    echo "No FIDOCONFIG var found..."
    break;
fi

if [[ -f ${BINKD_PASSWD} ]] && [[ -f ${HPT_POINTS} ]]; then
	if [[ "${cmdpnt}" != "" ]] && [[ "${cmdaka}" = "" ]]; then
                cmdaka=$(echo -ne "${AKA}.${cmdpnt}")
	elif [[ "${cmdaka}" != "" ]]; then
		cmdpnt=$(echo ${cmdaka}| awk -F'/' '{ print $2 }'| awk -F'.' '{ print $NF }')
	else
		echo "No valid parameters to locate points found! Use -a or -p switches!"
		exit -1
	fi

	# Searching for records in userlist:
	if [[ -f ${USERLIST} ]]; then
		uline=$(cat ${USERLIST}| grep -e "^Point,${cmdpnt}," -n| awk -F':' '{ print $1 }')
	fi

	# Searching for records in passwords:
	pline=$(cat ${BINKD_PASSWD} | grep -e "^${cmdaka}" -n | awk -F':' '{ print $1 }')
	
	# Searching for records in Binkleyforce:
	if [ -f "$NMSBASE/etc/bforce.passwd" ]; then
	        bline=$(cat "${NMSBASE}/etc/bforce.passwd" | grep -e "${cmdaka}" -n | awk -F':' '{ print $1 }')
	fi

	# Searching for records in links:
	lline=0
	llineend=0
	lidx=0
	lcnt=0
	lnext=0
	while read -r line; do
		lcnt=$(( ${lcnt} + 1 ))
		LLARG1=$(echo -ne ${line}| awk '{ print $1 }')
		LLARG2=$(echo -ne ${line}| awk '{ print $2 }')	
		if [[ "${LLARG1}" =~ ^[Ll][Ii][Nn][Kk]$ ]]; then
			if [[ ${lnext} = 1 ]]; then
				llineend=$(( ${lcnt} - 1 ))
				lnext=2
			fi
			lidx=${lcnt}
		fi
		if [[ "${LLARG1}" =~ ^[Aa][Kk][Aa]$ ]]; then
			if [[ "${LLARG2}" = "${cmdaka}" ]]; then
				lline=${lidx}
				lnext=1
			fi
		fi
		if [[ ${lnext} = 2 ]]; then
			break
		fi

	done < ${HPT_POINTS}
	if [[ ${lnext} = 1 ]]; then
		llineend=${lcnt}
	fi

	
	echo "Found uline: ${uline}, pline: ${pline}, bline: ${bline} ,lline: ${lline}-${llineend}"
	if [[ ${cmdyes} != 1 ]]; then
		echo "----- Next lines would be deleted:"
		if [[ -f ${USERLIST} ]]; then
			echo "-- Userlist:"
			echo "$(cat ${USERLIST}| sed -ne "${uline} p")"
		fi
		echo "-- Passwords:"
		echo "$(cat ${BINKD_PASSWD} | sed -ne "${pline} p")"
		
		if [ -f "$NMSBASE/etc/bforce.passwd" ]; then
			echo "-- BForce passwords:"
			echo "$(cat ${NMSBASE}/etc/bforce.passwd | sed -ne "${bline} p")"
		fi

		echo "-- Link:"
		echo "$(cat ${HPT_POINTS} | sed -ne "${lline},${llineend} p")"

		echo -e "\nDelete this point? [y/n]"
		old_stty_cfg=$(stty -g)
		stty raw -echo ; answer=$(head -c 1); stty ${old_stty_cfg}
		if [[ "${answer}" != "${answer#[Yy]}" ]]; then
			ansdelete=1
		else
			exit -1
		fi
	fi
	if [[ "${ansdelete}" = "1" ]] || [[ "${cmdyes}" = "1" ]]; then
		# Phisically delete it !
		if [[ -f ${USERLIST} ]]; then
			cat ${USERLIST} | sed -e "${uline} s/Point/Down/" > ${USERLIST}.new
			mv -f ${USERLIST} ${USERLIST}.old
			mv -f ${USERLIST}.new ${USERLIST}
		fi
		cat ${BINKD_PASSWD} | sed -e "${pline} d" > ${BINKD_PASSWD}.new
		mv -f ${BINKD_PASSWD} ${BINKD_PASSWD}.old
		mv -f ${BINKD_PASSWD}.new ${BINKD_PASSWD}

		if [ -f "${NMSBASE}/etc/bforce.passwd" ]; then
			cat $NMSBASE/etc/bforce.passwd | sed -e "${bline} d" >${NMSBASE}/etc/bforce.passwd.new
			mv -f $NMSBASE/etc/bforce.passwd $NMSBASE/etc/bforce.passwd.old
			mv -f $NMSBASE/etc/bforce.passwd.new $NMSBASE/etc/bforce.passwd
		fi 

		cat ${HPT_POINTS} | sed -e "${lline},${llineend} d" > ${HPT_POINTS}.new
		mv -f ${HPT_POINTS} ${HPT_POINTS}.old
		mv -f ${HPT_POINTS}.new ${HPT_POINTS}
	fi

fi

# Initiate mail to .official
