#!/bin/zsh

# Script to be triggered by network change, monitored by launchdaemon, to configure boosters
# Relies upon supporting files, below.  booser_list.plist to be edited for booster criteria per 'location'
# /Library/LaunchDaemons/com.filewave.networkwatch.plist
# /usr/local/etc/Scripts/booster_list.plist
# 2020.03.19 sean.holden@filewave.com

# Configure boosters based upon domain of hostname.  Could be reconfigured for other criteria
# However, note last if statement checking for lastDomain if changes are made and adjust appropriately
device_fqdn=$(hostname)

PlistBuddy="/usr/libexec/PlistBuddy"
fwcld_plist="/usr/local/etc/fwcld.plist"
booster_list="/usr/local/etc/Scripts/booster_list.plist"
launch_daemon="/Library/LaunchDaemons/com.filewave.networkwatch.plist"
default_domain=$(defaults read $booster_list default)
domain_found=0

function set_boosters {

	booster_counter=1
	while [ $booster_counter -lt 6 ]
	do
		# Read values from supporting file
		booster_name=$($PlistBuddy -c "print :${1}:booster${booster_counter}" $booster_list)
		booster_port=$($PlistBuddy -c "print :${1}:booster${booster_counter}Port" $booster_list)
		booster_publish=$($PlistBuddy -c "print :${1}:booster${booster_counter}PublishPort" $booster_list)

		# Set values for client preference
		$PlistBuddy -c "set :booster${booster_counter} $booster_name"  $fwcld_plist
		$PlistBuddy -c "set :booster${booster_counter}Port $booster_port" $fwcld_plist
		$PlistBuddy -c "set :booster${booster_counter}PublishPort $booster_publish" $fwcld_plist
		
		booster_counter=$((booster_counter + 1))
	done

	boosterRouting=$($PlistBuddy -c "print :${1}:boosterRouting" $booster_list)
	$PlistBuddy -c "set :boosterRouting $boosterRouting" $fwcld_plist
	$PlistBuddy -c "set :Comment ${1}" $launch_daemon	
}

# Check if we have changed domain.  Do not run if we have not
last_domain=$($PlistBuddy -c "Print :Comment" $launch_daemon)

if [[ ! "${device_fqdn}" =~ "$last_domain"$ ]]
then
	# Check we have a matching domain in file.  If not use default_domain
	while read line
	do
		if [[ "$line" =~ "${device_fqdn#*.}" ]]
		then
			domain_found=1
			break
		fi
	done< <(defaults read "$booster_list" | awk -F "=" '/\ \{$/ {print $1}')

	if [ $domain_found -eq 1 ]
	then
		set_boosters "${device_fqdn#*.}"
	else
		set_boosters "$default_domain"
	fi

	# Restart the client to pick up the change
	/usr/local/bin/fwcontrol client restart
fi

exit 0