#!/bin/bash  
#	
#  *********************************************************************
#  *				iBBS                                   *
#  *			       ------                                  *
#  *                                                                   *
#  * A Bulletin Board Program written by Justin Zygmont                *
#  * (jzygmont@solarflow.dyndns.org)                                   *
#  *                                                                   *
#  * For this program to work properly, each new user must have their  *
#  * shell set to this file.                                           *
#  *                                                                   *
#  * All of the program documentation is in the /usr/local/info        *
#  * directory.  Please read COPYING for copyright information.        *
#  *                                                                   *
#  *********************************************************************	

#####################################################
# Variables and Constants go here..
#####################################################

#***************** User configutable section **********************

VERSION="iBBS v1.0   (ibbs.sourceforge.net)"

SYSOP="unixman"	# It's recommended NOT to use 'root' as the sysop
export SYSOP

BBSNAME="Solarflow BBS"
export BBSNAME

#TERM=vt100	# We should have this for applications like pine to use,
#export TERM	# if the client side is using a dialup terminal program

#**************** End of User configurable section ******************

USER=$(whoami)
export USER

WHERE=$(w | grep $USER | tail -1 | awk '{printf("(%s) (%s)", $2,$3)}')
export WHERE

MENU_PATH=/usr/local/bin
export MENU_PATH

ETC_PATH=/usr/local/etc
export ETC_PATH

INFO_PATH=/usr/local/info
export INFO_PATH

DOC_PATH=/usr/local/doc
export DOC_PATH

GAMES_PATH=/usr/local/games
export GAMES_PATH

LIB_PATH=/usr/local/lib
export LIB_PATH

declare -x SELECTION

###################################################
# Functions are here..				  
###################################################

pause() 
{
	echo -n "$(cat $HOME/*.default)Press$(cat $LIB_PATH/14.default) ENTER$(cat $HOME/*.default) to Continue..." ; read NULL
}

DefaultColour()
{
	if [ -f $HOME/*.default ]
	then
		cat $HOME/*.default
	fi
}

export -f pause
export -f DefaultColour

############################# After Login ################################

echo -e "\033(U"	# This one line of code will tell the linux
			# console to use IBM graphics.

sleep 2		# This gives the user time to see if they have 'New mail waiting'

NOW=$(date '+%-I:%M %p  %a %b %-d')
echo "$USER logging ON from $WHERE at $NOW" >> $HOME/user.log 
echo "******************************************" >> $ETC_PATH/sysop.log
echo "$USER logging ON From $WHERE at $NOW" >> $ETC_PATH/sysop.log

##################### Display Logon screens section ######################

if ! [ -f $HOME/nologinscreens ]
then 

	if  [ -f $DOC_PATH/logon1 ] 
	then
		cat $DOC_PATH/logon1	# You can use 'more' instead of
		pause			# 'cat' here if you want the
	fi				# screen to pause

	clear
	linux_logo -ut "BBSNAME"	# This is a local custom 
	echo				# command that I added myself
	pause

	if [ -f $DOC_PATH/logon2 ] 
	then	
		cat $DOC_PATH/logon2
		sleep 4
	fi

	if [ -f $DOC_PATH/logon3 ] 
	then
		cat $DOC_PATH/logon3
		sleep 3
	fi
	if [ -f $DOC_PATH/logon4 ] 
	then
		cat $DOC_PATH/logon4
		pause
	fi
	if [ -f $DOC_PATH/logon5 ] 
	then
		cat $DOC_PATH/logon5
		pause
	fi
	if [ -f $DOC_PATH/newsletter ] 
	then
		echo
		more -d $DOC_PATH/newsletter
		echo
		pause
	fi
fi

############################# Main Loop ##################################
				
DONE=nope
while [ $DONE = nope ] 
do

if ! [ -f $MENU_PATH/main.menu ] 
then
	echo "Missing Main Menu - Contact Sysop"
	echo "Missing Main Menu for $LOGNAME" >> $ETC_PATH/sysop.log
	NOW=$(date '+%-I:%M %p  %a %b %-d')
	echo "$USER logging OFF at $NOW" >> $HOME/user.log
	echo "$USER logging OFF at $NOW" >> $ETC_PATH/sysop.log
	exit
fi
cat $MENU_PATH/main.menu
cat $LIB_PATH/11.default
echo "Available for Chat: $(mesg)  (Utilities Menu to change)"
DefaultColour
echo -n "Main Menu Command> "
read SELECTION
echo "$USER selected '$SELECTION' from Main Menu" >> $ETC_PATH/sysop.log
case $SELECTION in

# -----------------------------------------------------------
# code for Main Menu option G (Goodbye)
 
G | g ) 
	echo
	echo -n "Really want to leave? (y/N) "
	read SELECTION
	if [ $SELECTION = Y -o $SELECTION = y ] 
	then	
		echo
		echo -n "Leave a comment for the SYSOP? (your comments are very valuable) (y/N) "
		read SELECTION
		if [ $SELECTION = Y -o $SELECTION = y ]
		then
			pine $SYSOP
		fi
		clear
		cat $DOC_PATH/goodbye.ans
		DONE=yup
		NOW=$(date '+%-I:%M %p  %a %b %-d')
		echo "$USER logging OFF at $NOW" >> $ETC_PATH/sysop.log
	fi 
	;;

# end of code for option G
# --------------------------------------------------------------
# code for Main Menu option P (Page Sysop)

P | p )
	if [ -x $MENU_PATH/p.bash ] 
	then
		bash $MENU_PATH/p.bash
	fi
        ;;

# end of code for option P
# ---------------------------------------------------------------
# code for Main Menu option B (Bulletin Menu)

B | b )
	if [ -x $MENU_PATH/b.bash ]
	then
		bash $MENU_PATH/b.bash
	fi
	;;

# end fo code for Main Menu option B
# ----------------------------------------------------------------
# code for Main Menu option F (File Menu)

F | f )
	if [ -x $MENU_PATH/f.bash ]
	then
		bash $MENU_PATH/f.bash
	fi
	;;
	
# end of code for Main Menu option F
# ----------------------------------------------------------------
# code for Main Menu option Z (Games Menu)

Z | z )
	if [ -x $MENU_PATH/z.bash ]
	then
		bash $MENU_PATH/z.bash
	fi
	;;

# end of code for Main Menu option Z
# ----------------------------------------------------------------
# code for Main Menu option U (Utility Menu)

U | u )
	if [ -x $MENU_PATH/u.bash ]
	then
		bash $MENU_PATH/u.bash
	fi
	;;

# end of code for Main Menu option U
# -----------------------------------------------------------------
# code for Main Menu option X (BBS List)

X | x )
	if [ -x $MENU_PATH/x.bash ]
	then
		bash $MENU_PATH/x.bash
	fi
	;;

# end of code for Main Menu option X
# -----------------------------------------------------------------
# code for Main Menu option M (Message Menu)

M | m )
	if [ -x $MENU_PATH/m.bash ]
	then
		bash $MENU_PATH/m.bash
	fi
	;;

# end of code for Main Menu option M
# ------------------------------------------------------------------
# code for Main Menu option SysM (Sysop Menu)
# ** This Menu option is hidden **

SysM )
	echo
	stty -echo
	echo -n "Enter the Password> "
	read PASSWORD
	stty echo
	SELECTION=$(echo "$PASSWORD" | md5sum)
	if  [ "$SELECTION" = "d60168a33fd321ad1a29382cafcb60d3  -" ] 
	then	#Set the encrypted password up there ^^.
		if [ -x $MENU_PATH/sysm.bash ]
		then
			bash $MENU_PATH/sysm.bash
		fi
	else
		echo 
		echo "Password Incorrect! - Invalid Password attempt has been logged."	
		echo "- INVALID PASSWORD ATTEMPTED for Sysop Menu: [$PASSWORD] For user '$USER'" >> $ETC_PATH/sysop.log
		NOW=$(date '+%-I:%M %p  %a %b %-d')
		echo "$USER logging OFF at $NOW" >> $ETC_PATH/sysop.log
		exit
	fi
	;;

# end of code for Main Menu option SysM
# ---------------------------------------------------------------
# code for Main Menu option I (System Info)

I | i )
	clear
	cat $LIB_PATH/11.default
	echo "SYSTEM INFORMATION"
	echo "------------------"
	echo
	echo "$(cat $LIB_PATH/9.default)BBS Program................:$(cat $LIB_PATH/13.default) $VERSION"
	echo "$(cat $LIB_PATH/9.default)Operating System...........:$(cat $LIB_PATH/13.default) Linux (Red Hat release 6.2)"
	echo "$(cat $LIB_PATH/9.default)Sysop......................:$(cat $LIB_PATH/13.default) UNIXMAN (unixman@solarflow.dyndns.org)"
	echo "$(cat $LIB_PATH/9.default)Nodes......................:$(cat $LIB_PATH/13.default) unlimited telnet, 1 dialup"
	echo "$(cat $LIB_PATH/9.default)Access.....................:$(cat $LIB_PATH/13.default) solarflow.dyndns.org   Dial-in #-> 416-494-4278"
	echo "$(cat $LIB_PATH/9.default)BBS Name...................:$(cat $LIB_PATH/13.default) $BBSNAME"
	echo "$(cat $LIB_PATH/9.default)Computer...................:$(cat $LIB_PATH/13.default) P-166 with 128 MB of RAM"
	echo "$(cat $LIB_PATH/9.default)Modem......................:$(cat $LIB_PATH/13.default) High speed cable modem"
	echo "$(cat $LIB_PATH/9.default)Capacity...................:$(cat $LIB_PATH/13.default) 3 GB"
	echo "$(cat $LIB_PATH/9.default)Disk Usage.................:$(cat $LIB_PATH/13.default) $(df|head -2|awk '{print $5}'|tail -1)"
	echo
	pause
	;;

# end of code for Main Menu option I
# ----------------------------------------------------------------
# code for Main Menu option W (Who's On)

W | w )
	DefaultColour
	echo
	who -H -w 
	echo
	pause
	;;
	
# end of code for Main Menu option W
# -----------------------------------------------------------------
# code for Main Menu option ! (Time Remaining)

! )
	clear
	echo
	echo "+------------------------------+"
	echo "|                              |"
	echo "| Logged in at: $(cat $LIB_PATH/9.default)$(cat /home/$USER/user.log | tail -1 | cut -f8,9 -d " ")$(cat $HOME/*.default)        |"
	echo "| Current time is:$(cat $LIB_PATH/9.default) $(date '+%-I:%M %p')$(cat $HOME/*.default)     |"
	echo "|                              |"
	echo "| Daily time limit:$(cat $LIB_PATH/9.default) 2 Hours$(cat $HOME/*.default)    |"
	echo "+------------------------------+"
	echo
	pause
	;;

# end of code for Main Menu option !
# ----------------------------------------------------------------	
# code for Main Menu option R (Page User)

R | r )
	cat $LIB_PATH/13.default
	echo
	who -H -w
	cat $LIB_PATH/14.default
	echo "-----------------------------------------------------------------"
	echo "The MESG field indicates weather the user is available for chat."
	echo "[+] is a YES, and [-] is NO."
	echo "-----------------------------------------------------------------"
	DefaultColour
	echo -n "Who would you like to Page? "
	read SELECTION
	if [ -n "$SELECTION" ] 
	then
		echo "$USER Paged user [$SELECTION]" >> $ETC_PATH/sysop.log
		cat $LIB_PATH/11.default
		#echo "<ESC> to see the menu"	#if you decide to use ytalk 
		echo "<CTRL>-C to EXIT from Chat"
		sleep 2
		#ytalk $SELECTION	#See the DOC file for more info
		talk $SELECTION		#before using ytalk
	fi
	;;

# end of code for Main Menu option R
# ----------------------------------------------------------------
# code for Main Menu option T (Today's Callers)

T | t )
	zz=$(date '+%a %b  %-d')
	yy=$(date '+%a %b %-d')
	echo
	last | grep "$zz" | more -d
	last | grep "$yy" | more -d
	echo
	pause
	;;

# end of code for Main Menu option T
# -----------------------------------------------------------------
# code for Main Menu option N (BBS Newsletter)

N | n )
	if [ -f $DOC_PATH/newsletter ]
	then
		echo
		more -d $DOC_PATH/newsletter
		echo
		pause
	fi
	;;
	
# end of code for Main Menu option N
# ------------------------------------------------------------------
# code for Main Menu option S (Message to Sysop)

S | s )
	DefaultColour
	pine $SYSOP
	;;

# end of code for Main Menu option S
# -------------------------------------------------------------------
# code for Main Menu option L (List of Users)

L | l )
	if [ -f $DOC_PATH/bbsusers.ans ]
	then
		echo
		more -d $DOC_PATH/bbsusers.ans
		echo
		pause
	fi
	;;

# end of code for Main Menu option L
# --------------------------------------------------------------------
# code for Main Menu options that don't exist (hack attempts)

??*)
	echo
	echo "NO  You can't grab a shell like that, DUMMY!"
	echo -e "\033[10;25]\033[11;1500]\007"
	pause
	;;

# end of code for hack attempts
# --------------------------------------------------------------------

esac
done

exit
