#!/bin/sh

# arserver postintall script for Mac OS X
# Version 3.2.1 - Release Sept 2010
# (C) 2010 Ethan Funk

msgpfx="arserver postinsall: "

# ===========================================================================
# Delete old copies of AudioRack -- No longer compatible with database structure!
# ===========================================================================
rm -f /Applications/ARSuite/AudioRack2.7*

# ===========================================================================
# OS version dependent stuff 
# ===========================================================================
osv=`sw_vers -productVersion`
case $osv in
10.6*)
# ===========================================================================
# OS X 10.6
# create arserver Users and groups (Directory Services method)
# ===========================================================================
echo $msgpfx "OS X 10.6 Detected"
unset -v i new_id idvar
declare -i new_id=0 i=100 idvar=0
name=`/usr/bin/dscl . -search /Users name "arserver"`
if [[ -z "$name" ]]; then
	# arserver user does not exist yet... create it.
	# find a available group ID
	while [[ $idvar -eq 0 ]]; do 
   		i=$[i+1]
		if [[ $i -gt 499 ]]; then
			echo $msgpfx "Failed to find an available User and Group ID! Exiting..."
			exit 1
		fi	
		if [[ -z "$(/usr/bin/dscl . -search /Users uid $i)" ]] && [[ -z "$(/usr/bin/dscl . -search /Groups gid $i)" ]]; then
			new_id=$i
			idvar=1
			#break
		fi
	done
	# create the new arserver user and group
	/usr/sbin/dseditgroup -o create -r "AudioRack Group" -i $new_id "arserver"
	/usr/bin/dscl . -append "/Groups/arserver" passwd "*"
	/usr/bin/dscl . -create "/Users/arserver"
	/usr/bin/dscl . -append "/Users/arserver" RealName "AudioRack User"
	/usr/bin/dscl . -append "/Users/arserver" NFSHomeDirectory "/usr/local/arserver/"
	/usr/bin/dscl . -append "/Users/arserver" UserShell "/usr/bin/false"
	/usr/bin/dscl . -append "/Users/arserver" PrimaryGroupID $new_id
	/usr/bin/dscl . -append "/Users/arserver" UniqueID $new_id
	/usr/bin/dscl . -append "/Users/arserver" hint ""
	/usr/bin/dscl . -append "/Users/arserver" comment "AudioRack Deamon account created: $(/bin/date)"
	/usr/bin/dscl . -append "/Users/arserver" Password "*"
	/usr/bin/dscl . -append "/Groups/arserver" GroupMembership "arserver"
	/usr/bin/dscl . -append "/Groups/staff" GroupMembership "arserver"
	# make the arserver account hidden
	/usr/bin/defaults write /Library/Preferences/com.apple.loginwindow Hide500Users -bool YES
	/usr/bin/defaults write /Library/Preferences/com.apple.loginwindow HiddenUsersList -array arserver
fi

# ===========================================================================
# OS X 10.6 Move legacy Lib files to /usr/local/lib for ARStudio/ARManager
# ===========================================================================
if [ ! -d /usr/local/lib ]; then
        echo $msgpfx "creating /usr/local/lib ..."
        cd /usr/local
        mkdir lib
        chmod -R 755 lib
fi
  
echo $msgpfx "moving libdbi libraries to /usr/local/lib ..."
mv -f /Applications/ARSuite/tmp/lib/lib* /usr/local/lib/.

if [ ! -d /usr/local/lib/dbd ]; then
        echo $msgpfx "creating /usr/local/lib/dbd ..."
        cd /usr/local/lib
        mkdir dbd
        chmod -R 755 dbd
fi

echo $msgpfx "moving libdbi drivers libraries to /usr/local/lib/dbd ..."
mv -f /Applications/ARSuite/tmp/lib/dbd/* /usr/local/lib/dbd/.

;;

# ===========================================================================
# OS X version unsupported
# ===========================================================================
*)
echo $msgpfx "Unsupported Operating system version! Exiting..."
exit 2
;;

esac

# ===========================================================================
# Create required directories
# ===========================================================================
if [ ! -d /etc/arserver ]; then
	echo $msgpfx "creating /etc/arserver ..."
	cd /etc/
	mkdir arserver
fi

if [ ! -d /usr/local/arserver ]; then
	echo $msgpfx "creating /usr/local/arserver ..."
	cd /usr/local/
	mkdir arserver
fi

if [ ! -d /usr/local/arserver/encoders ]; then
	echo $msgpfx "creating /usr/local/arserver/encoders ..."
	cd /usr/local/arserver
	mkdir encoders
fi


if [ ! -d /usr/local/arserver/tmp ]; then
	echo $msgpfx "creating /usr/local/arserver/tmp ..."
	cd /usr/local/arserver
	mkdir tmp
fi

# ===========================================================================
# Move arserver binary file
# ===========================================================================
if [ -f /usr/local/arserver/arserver ]; then
	echo $msgpfx "renaming old arserver binary file arserver.old ..."
	mv -f /usr/local/arserver/arserver  /usr/local/arserver/arserver.old
fi

echo $msgpfx "moving arserver to /usr/local/arserver/ ..."
mv -f /Applications/ARSuite/tmp/arserver/arserver /usr/local/arserver/.
mv -f /Applications/ARSuite/tmp/arserver/help.txt /usr/local/arserver/.

# ===========================================================================
# Move lame encoder
# ===========================================================================
if [ -f /usr/local/arserver/encoders/lame ]; then
	echo $msgpfx "removing old lame encoder ..."
	rm -f /usr/local/arserver/encoders/lame
fi

echo $msgpfx "moving lame encoder to /usr/local/arserver/encoders/ ..."
mv /Applications/ARSuite/tmp/arserver/encoders/lame /usr/local/arserver/encoders/.

# ===========================================================================
# Move custom lib files
# ===========================================================================
if [ -f /usr/local/arserver/lib/]; then
	echo $msgpfx "removing old lib folder ..."
	rm -fR /usr/local/arserver/lib
fi

echo $msgpfx "moving lame encoder to /usr/local/arserver/lib/ ..."
mv /Applications/ARSuite/tmp/arserver/lib /usr/local/arserver/.

# ===========================================================================
# Move init, StartupItem and config files keeping old files where required
# ===========================================================================
if [ -f /usr/local/arserver/startup.conf ]; then
	echo $msgpfx "removing old startup file ..."
	rm -f /usr/local/arserver/startup.conf
fi

if [ ! -f /usr/local/arserver/ars_startup.conf ]; then
	echo $msgpfx "moving user startup.conf file ..."
	mv /Applications/ARSuite/tmp/arserver/user_startup.conf /usr/local/arserver/ars_startup.conf
fi

if [ ! -f /etc/arserver/ars_startup.conf ]; then
	echo $msgpfx "moving root startup.conf file ..."
	mv /Applications/ARSuite/tmp/arserver/root_startup.conf /etc/arserver/ars_startup.conf
fi

if [ -f /usr/local/arserver/stream_example.conf ]; then
	echo $msgpfx "removing old stream.conf example file ..."
	rm -f /usr/local/arserver/stream_example.conf
fi

mv /Applications/ARSuite/tmp/arserver/stream_example.conf /usr/local/arserver/stream_example.conf

if [ -f /usr/local/arserver/mysql.dbi ]; then
	echo $msgpfx "removing old mysql.dbi files ..."
	rm -rf /usr/local/arserver/mysql*.dbi
fi

echo $msgpfx "moving mysql.dbi file... "
mv /Applications/ARSuite/tmp/arserver/mysql.dbi /usr/local/arserver/.
mv /Applications/ARSuite/tmp/arserver/mysql2.0.dbi /usr/local/arserver/.
mv /Applications/ARSuite/tmp/arserver/mysql2.1.dbi /usr/local/arserver/.
mv /Applications/ARSuite/tmp/arserver/mysql2.2.dbi /usr/local/arserver/.
mv /Applications/ARSuite/tmp/arserver/mysql2.3.dbi /usr/local/arserver/.
mv /Applications/ARSuite/tmp/arserver/mysql2.4.dbi /usr/local/arserver/.
mv /Applications/ARSuite/tmp/arserver/mysql2.5.dbi /usr/local/arserver/.

if [ ! -d /Library/StartupItems ]; then
	echo $msgpfx "creating /Library/StartupItems ..."
	cd /Library
	mkdir StartupItems
	chmod 755 StartupItems
	chown root StartupItems
	chgrp wheel StartupItems
fi

if [ ! -d /Library/StartupItems/ARServer ]; then
	echo $msgpfx "creating /Library/StartupItems/ARServer ..."
	cd /Library/StartupItems
	mkdir ARServer
fi

echo $msgpfx "moving arserver startup scripts... "

##########################################################################
# this needs to handle conversion of the old startup disable technique
##########################################################################
if [ -f /Library/StartupItems/ARServer/.no-disable ]; then
	rm /Library/StartupItems/ARServer/.no-disable
	mv -f /Applications/ARSuite/tmp/ARServerStartupItem/arserver /Library/StartupItems/ARServer/arserver
else
	if [ -f /Library/StartupItems/ARServer/.disable ]; then
		rm /Library/StartupItems/ARServer/.disable
		rm -f /Library/StartupItems/ARServer/arserver
		mv -f /Applications/ARSuite/tmp/ARServerStartupItem/arserver /Library/StartupItems/ARServer/.arserver
	else
		if [ -f /Library/StartupItems/ARServer/arserver ]; then
			mv -f /Applications/ARSuite/tmp/ARServerStartupItem/arserver /Library/StartupItems/ARServer/arserver
		else
			mv -f /Applications/ARSuite/tmp/ARServerStartupItem/arserver /Library/StartupItems/ARServer/.arserver
		fi
	fi
fi

mv -f /Applications/ARSuite/tmp/ARServerStartupItem/StartupParameters.plist /Library/StartupItems/ARServer/StartupParameters.plist

cd /Library/StartupItems
chmod -R 755 ARServer
chown -R root ARServer
chgrp -R wheel ARServer
cd ARServer
chmod 644 *
chmod 755 arserver

# ===========================================================================
# Move source code, License, utilities and ReadMe files
# ===========================================================================
if [ ! -d /usr/local/arserver/utilities ]; then
	echo $msgpfx "creating /usr/local/utilities ..."
	cd /usr/local/arserver
	mkdir utilities
	chmod 755 utilities
	chown arserver utilities
	chgrp arserver utilities
fi

echo $msgpfx "moving utilities to /usr/local/arserver/utilities ..."
mv /Applications/ARSuite/tmp/arserver/utilities/EASLogger /usr/local/arserver/utilities/.
mv /Applications/ARSuite/tmp/arserver/utilities/php\ scripts /usr/local/arserver/utilities/.

if [ -d /usr/local/arserver/src ]; then
	echo $msgpfx "removing old source code directory ..."
	cd /usr/local/arserver
	rm -Rf src
fi

echo $msgpfx "moving source code to /usr/local/arserver/src ..."
mv /Applications/ARSuite/tmp/arserver/src /usr/local/arserver/.

if [ -f /usr/local/arserver/README.txt ]; then
	echo $msgpfx "removing old README file ..."
	rm -rf /usr/local/arserver/README.txt
fi

echo $msgpfx "moving README file... "
mv /Applications/ARSuite/tmp/arserver/README.txt /usr/local/arserver/.

if [ -f /usr/local/arserver/License.rtf ]; then
	echo $msgpfx "removing old License file ..."
	rm -rf /usr/local/arserver/License.rtf
fi

echo $msgpfx "moving License file... "
mv /Applications/ARSuite/tmp/arserver/License.rtf /usr/local/arserver/.

# ===========================================================================
# Set permissions
# ===========================================================================
cd /usr/local/
chmod -R 775 arserver
chown -R root arsrever
chgrp -R wheel arserver
chown arserver arsrever
chgrp arserver arserver

cd /usr/local/arserver
chmod -R 777 tmp
chown -R arserver tmp
chgrp -R arserver tmp

cd /etc/
chmod -R 770 arserver
chown -R arserver arserver
chgrp -R arserver arserver

# ===========================================================================
# We're done - clean up /tmp
# ===========================================================================
echo msgpfx "deleting temporary files in /Applicatios/AudioRack/tmp ..."
cd /Applications/ARSuite
rm -Rf tmp

# ===========================================================================
# All done.
# ===========================================================================
echo $msgpfx "done."

# END OF FILE
