#!/bin/bash
#
# uninstall.sh
#
# Copyright (C) 2011-2012 Cesnet z.s.p.o
#

VERSION="2.1"

#-------------------------------------------------------------------------------
#				FUNCTIONS
#-------------------------------------------------------------------------------
usage()
{
	echo "Usage: `basename $0` [-d <directory>] [-hV]"
	echo "-d <directory>            uninstallation directory (default: /opt)"
	echo "-h                        print this help"
	echo "-V                        print script version number and exit"
	echo
	echo "Example: # ./`basename $0` -d /opt"
	echo
	echo "Note: You must be root for running this script."
	echo "      For more information about uninstallation process, see README file (section Uninstallation)."
	echo
	exit 0
}


version()
{
	echo "`basename ${0}` - current version is $VERSION"
	exit 0
}


err()
{
	echo "FAILED!"
	cat $err
	rm -rf $err $backup_dir
	echo
	echo "Uninstallation of $package_version package FAILED!!!"
	exit 1
}


err_clean()
{
	echo "FAILED!"
	echo " -> Reverting changes of warden server package ... OK"
	rm -rf ${server_path}/* > /dev/null 2>&1	# delete new version 
	cp -R ${backup_dir}/* $server_path		# copy old backuped server
	for file in `ls -1 $bin`
	do  
		ln -s ${bin}/$file ${local_bin}/$file	# create symlinks to /usr/local/bin
	done
	cat $err
	rm -rf $err $backup_dir
	echo
	echo "Uninstallation of $package_version package FAILED!!!"
	exit 1
}


root_chck()
{
	if [ $UID -ne 0 ]; then
		echo "You must be root for running this script!"
		exit 1
	fi
}


params_chck()
{
	if [ -z $prefix ]; then
		prefix=/opt
		echo "Warning: parameter -d <directory> is not set - default uninstallation directory is ${prefix}!"
	fi
}


obtain_package_version()
{
	if [ -f $old_package_version_file ]; then 
		package_version=`cat $old_package_version_file`
	else
		package_version="unknown"
	fi
}


warden_dir_chck()
{
	echo -n "Checking Warden server directory ... "
	if [ ! -d $server_path ]; then
		echo "FAILED!"
		ls $server_path
		exit 1
	else
		echo "OK"
	fi
}


backup()
{
	echo -n "Backing-up Warden server directory ... "
	mkdir $backup_dir
	if cp -R ${server_path}/* $backup_dir 2> $err; then
		echo "OK"
	else
		err
	fi
}


delete_symlinks()
{
	echo -n "Deleting symlinks from /usr/local/bin ..."
	for file in `ls -1 $bin`
	do
		rm -rf ${local_bin}/$file 2> /dev/null
	done
	echo "OK"
}


uninstall_warden_server()
{
	echo -n "Uninstalling $package_version package ... "
	cp ${doc}/UNINSTALL $uninstall_file
	if rm -rf $server_path 2> $err; then
		echo "OK"
	else
		err_clean
	fi
}



#-------------------------------------------------------------------------------
#				MAIN
#-------------------------------------------------------------------------------

# read input
while getopts "d:Vh" options; do
	case $options in
		d ) prefix=$OPTARG;;
		h ) usage;;
		V ) version;;
		* ) usage;;
	esac
done

# root test
root_chck

# params test
params_chck

# create variables
[[ $prefix == */ ]] && prefix="${prefix%?}" # remove last char (slash) from prefix
dirname=`dirname $0`
server_path="${prefix}/warden-server"
bin="${server_path}/bin"
local_bin="/usr/local/bin"
etc="${server_path}/etc"
doc="${server_path}/doc"
uninstall_file="/tmp/UNINSTALL.warden"
old_package_version_file="${etc}/package_version"
err="/tmp/warden-err"
backup_dir="/tmp/warden-backup"

# obtain version of installed warden-server package
obtain_package_version

echo
echo "------------------------- Uninstallation process --------------------------------"

# check if $prefix/warden-server directory exist
warden_dir_chck

# make backup of currently installed warden-server package
backup

# delete symbolic links
delete_symlinks

# do uninstallation
uninstall_warden_server

echo
echo "Please follow post-uninstallation steps in $uninstall_file!"
echo
echo "Uninstallation of $package_version package was SUCCESSFUL!"
echo
# cleanup section
rm -rf $err $backup_dir

exit 0
