#!/bin/bash

E1=E
E2=("CONFIGURE PPP ACCOUNTS")

function set_baud {
    case $CHOICE in
	A) BAUD="19200";;
	B) BAUD="115200";;
    esac
}

function set_protocol {
    case $CHOICE in
        A) PROTOCOL=none;;
        B) PROTOCOL=ppp;;
    esac
}

function set_modem {
    case $CHOICE in
        A) MODEM="/dev/modem";;
        B) MODEM="/dev/ttyS0";;
        C) MODEM="/dev/ttyS1";;
        D) MODEM="/dev/ttyS2";;
        E) MODEM="/dev/ttyS3";;
    esac
}

function set_timeout {
    case $CHOICE in
        A) TIMEOUT="60";;
        B) TIMEOUT="300";;
        C) TIMEOUT="600";;
        D) TIMEOUT="900";;
        E) TIMEOUT="1800";;
        F) TIMEOUT="3200";;
    esac
}

function make_chap_secrets {
    backup_conf --quiet $CHAPSECR
    [ -f $CHAPSECR ] || touch $CHAPSECR
    if ! grep -qe $LOGINNAME $CHAPSECR ; then \
	echo -e "$PROVIDER $LOGINNAME $PASSWD *
$LOGINNAME $PROVIDER $PASSWD *" >> $CHAPSECR
	chmod 600 $CHAPSECR
	echo "Modified file $CHATFILE" > $TXTTMP
    fi
}


function make_chat_file {
    backup_conf --quiet $CHATFILE
    echo -e \'ABORT\' \'BUSY\' > $CHATFILE
    echo -e \'ABORT\' \'ERROR\' >> $CHATFILE
    echo -e \'ABORT\' \'NO CARRIER\' >> $CHATFILE
    echo -e \'ABORT\' \'NO DIALTONE\' >> $CHATFILE
    echo -e \'ABORT\' \'Invalid Login\' >> $CHATFILE
    echo -e \'ABORT\' \'Login incorrect\' >> $CHATFILE
    if [ "$CHAP" = "yes" ]; then
	echo -e \'\' \'AT\' >> $CHATFILE
    else
	echo -e \'\' \'ATZ\' >> $CHATFILE
    fi    
    echo -e \'OK\' \'ATDT$PHONE\' >> $CHATFILE
    echo -e \'CONNECT\' \'\' >> $CHATFILE
    if [ "$CHAP" = "no" ]; then
	echo -e \'TIMEOUT\' \'$TIMEOUT\' >> $CHATFILE
	echo -e \'~--\' \'\' >> $CHATFILE
	echo -e \'ogin\' \'$LOGINNAME\' >> $CHATFILE
	echo -e \'assword\' \'$PASSWD\' >> $CHATFILE
    fi
    if [ "$PROTOCOL" = "ppp" -o "$PROTOCOL" = "PPP" ]; then
	echo -e \'ocol\' \'$PROTOCOL\' >> $CHATFILE
    fi
    chmod 700 $CHATFILE
    echo "Created file $CHATFILE" >> $TXTTMP
}

function make_ppp_options {
    backup_conf --quiet $OPTIONSFILE
    echo asyncmap 0 > $OPTIONSFILE
    echo crtscts >> $OPTIONSFILE
    echo modem >> $OPTIONSFILE
    echo lock >> $OPTIONSFILE
    echo mru 1500 >> $OPTIONSFILE
    echo mtu 1500 >> $OPTIONSFILE
    echo persist >> $OPTIONSFILE
#   echo idle 1800 >> $OPTIONSFILE
    echo name $LOGINNAME >> $OPTIONSFILE
    echo port $MODEM >> $OPTIONSFILE
    [ "$HIDE" = "yes" ] && echo hide-password >> $OPTIONSFILE
    [ "$DEFR" = "yes" ] && echo defaultroute >> $OPTIONSFILE
    [ "$CHAP" = "no" ] && echo "-chap" >> $OPTIONSFILE
    [ "$DEBUG" = "yes" ] && echo debug >> $OPTIONSFILE
    chmod 600 $OPTIONSFILE
    echo "Created file $OPTIONSFILE" >> $TXTTMP
}

function make_resolv_conf {
    backup_conf --quiet $RESOLV
    echo -en "nameserver $DNS1\nnameserver $DNS2" > $RESOLV
    echo "Created file $RESOLV" >> $TXTTMP
}

function menuchoices2 {
    case $choice in
	A) inputbox "Your Provider (OK for \"$PROVIDER\")"
	   PROVIDER="${INPUT:=$PROVIDER}"
	   [ -f "$RCFILE-$PROVIDER" ] && . $RCFILE-$PROVIDER
	   [ "$PROVIDER" != "no_provider" -a -f "$RCFILE-no_provider" ] && \
	   rm -f $RCFILE-no_provider
	   ;;
	B) inputbox "Enter Loginname"
	   LOGINNAME="${INPUT:=$LOGINNAME}"
	   ;;
	C) if [ -z "$DISPLAY" ]; then
		clear
		stty -echo
	   	echo -ne "Enter Password: "
		read PASSWD
		stty echo
	   else
		inputbox "Enter Password"
		PASSWD=$INPUT
	   fi
	   ;;
	D) inputbox "Enter Phone Number (OK for \"$PHONE\")"
	   PHONE=${INPUT:=$PHONE}
	   ;;
	E) inputbox "Enter DNS 1 (OK for \"$DNS1\")"
	   DNS1=${INPUT:=$DNS1}
	   ;;
	F) inputbox "Enter DNS 2 (OK for \"$DNS2\")"
	   DNS2=${INPUT:=$DNS2}
	   ;;
	G) RAD="Select connection timeout"
	   STRING=("A" " 1 Minute" on \
		   "B" " 5 Minutes" off \
		   "C" "10 Minutes" off \
		   "D" "15 Minutes" off \
		   "E" "30 Minutes" off \
		   "F" "60 Minutes" off)
	   INPUT=set_timeout
	   radiolist "${STRING[@]}"
	   ;;
	H) [ "$DEFR" = "yes" ] && DEFR=no || DEFR=yes
	   ;;
	I) [ "$CHAP" = "yes" ] && CHAP=no || CHAP=yes
	   ;;
	J) [ "$HIDE" = "yes" ] && HIDE=no || HIDE=yes
	   ;;
	K) [ "$DEBUG" = "yes" ] && DEBUG=no || DEBUG=yes
	   ;;
	L) RAD="Select modem speed"
	   STRING=("A" "19200" off \
		   "B" "115200" on)
	   INPUT=set_baud
	   radiolist "${STRING[@]}"
	   ;;
	M) RAD="Select protocol (only needed in some cases)"
	   STRING=("A" "none" on \
		   "B" "ppp" off)
	   INPUT=set_protocol
	   radiolist "${STRING[@]}"
	   ;;
	N) RAD="Select modem device file"
	   STRING=("A" "/dev/modem" on \
		   "B" "/dev/ttyS0" off \
		   "C" "/dev/ttyS1" off \
		   "D" "/dev/ttyS2" off \
		   "E" "/dev/ttyS3" off)
	   INPUT=set_modem
	   radiolist "${STRING[@]}"
	   ;;
	O) inputbox "Enter pathname to firewall-script (OK for \"$FIRE\", leave empty for no firewall)"
	   FIRE=${INPUT}
	   if [ ! -z "$FIRE" ]; then
		[ -f "$FIRE" ] || msgbox "$FIRE does not exist"
	   fi
	   ;;
	P) saverc
	   . $RCFILE
	   . $RCFILE-$PROVIDER
	   make_chap_secrets
	   make_chat_file
	   make_ppp_options
	   make_resolv_conf
	   chmod u=rw $RCFILE*
	   chmod go-rwx $RCFILE*
	   textbox $TXTTMP
	   ;;
    esac
    configure_ppp
}

function configure_ppp {
    MENU="CONFIGURE PPP ACCOUNTS"
    MENUCHOICES=menuchoices2
    PPPCONF=("A" "Provider            [$PROVIDER]" \
	     "B" "Loginname           [$LOGINNAME]" \
	     "C" "Password" \
	     "D" "Phone Number        [$PHONE]" \
	     "E" "Nameserver 1        [$DNS1]" \
	     "F" "Nameserver 2        [$DNS2]" \
	     "G" "Connection timeout  [$TIMEOUT]" \
	     "H" "Defaultroute        [$DEFR]" \
	     "I" "Chap                [$CHAP]" \
	     "J" "Hide Password       [$HIDE]" \
	     "K" "Debug               [$DEBUG]" \
	     "L" "Modem Speed         [$BAUD]" \
	     "M" "Protocol            [$PROTOCOL]" \
	     "N" "Modem device-file   [$MODEM]" \
	     "O" "Use firewall script [$FIRE]" \
	     "P" "Save settings to $HOME/.conmen")
    menubox "${PPPCONF[@]}"
}
