#!/bin/bash

# PC/SC服务卸载脚本
# pcscd,pcsc-lite,UDKmgr,HIDmgr,CCIDmgr,PKSC11,WatchSafe
# WatchData
# 李勃ﺿ2011巿暿

# 注册到firefox的P11模块县
P11_MODEL_NAME=PROXKey_Module

# Java工具名称
JAVATOOL_NAME_JAR=watchsafe_Proxkey_3.4.3.jar
JAVATOOL_NAME=Watchsafe_ProxKey

# Java UISvr名称
JAVAUISer_NAME_JAR=ProxKeyUISvr.jar

#检测工具jar包名称
REPAIRTOOL_NAME_JAR=ProxKeyDiagnose.jar
REPAIRTOOL_NAME=ProxKey_DiagnoseTool

#uninstall tool name
UNINSTALL_TOOL_NAME=uninstall
# daemon名称
DAEMON_NAME=pcscd_wd

# 系统字长 32/64
SYSLONGBIT=

# WatchData主目录目标位绿
DDIR_WD=/usr/lib/WatchData

# 版本主目录目标位绿
DDIR_SAFE=$DDIR_WD/ProxKey

# 可执行文件目标位绿
DDIR_BIN=$DDIR_SAFE/bin

# 快捷方式路径
APP_START_DIR=/usr/share/applications

# 后台启动脚本
WD_DAEMON_NAME=WDProxKeyDaemon
WD_DAEMON_NAME_SH=$WD_DAEMON_NAME.sh
XDG_AUTOSTART_DIR=/etc/xdg/autostart


# 服务管理工具
BIN_update_rc_d="/usr/sbin/update-rc.d"
BIN_chkconfig="/sbin/chkconfig"
BIN_insserv="/sbin/insserv"

# getconf工具位置
BIN_getconf='/usr/bin/getconf'

ErrFail() {
	echo ''
	echo '	install failed.'
	echo ''
	exit -1
}


#获取系统信息
GetSystemInfo () {
	if [ -e /etc/os-release ]; then
		ReleaseInfo=$(cat /etc/os-release)
	elif [ -e /etc/issue ]; then
		ReleaseInfo=$(cat /etc/issue)
	fi
	case "$ReleaseInfo" in
	*'openSUSE'*)
		echo '	Linux Release is openSUSE ...'
		ReleaseInfo='openSUSE'
		;;
	*'Ubuntu'*)
		echo '	Linux Release is Ubuntu ...'
		ReleaseInfo='Ubuntu'
		;;
	*'Fedora'*)
		echo '	Linux Release is Fedora ...'
		ReleaseInfo='Fedora'
		;;
	*'Debian'*)
		echo '	Linux Release is Debian ...'
		ReleaseInfo='Debian'
		;;
	*'Red Hat'*)
		echo '	Linux Release is Red Hat ...'
		ReleaseInfo='Fedora'
		;;
	*'BOSS'*)
		echo '	Linux Release is BOSS ...'
		ReleaseInfo='Debian'
		;;

	*'CentOS'*)
		echo '	Linux Release is CentOS ...'
		ReleaseInfo='Fedora'
		;;
	*)
		echo "	Can't get your Linux release info !"
		echo "	"
	esac

	SYSLONGBIT=$($BIN_getconf LONG_BIT)
	echo "	System LONGBIT is $SYSLONGBIT ..."
	if [ ${SYSLONGBIT} -gt 32 ]; then
		SYSLONGBIT='64bit'
	else
		SYSLONGBIT='32bit'
	fi
}


#删除文件
DelFile () {

	rm -fr $DDIR_SAFE
	#检查一下是否成刿	
	if [ -d $DDIR_SAFE ]; then
		ErrFail
	fi
	
	#快捷方式
	rm -f /usr/bin/$JAVATOOL_NAME
	rm -f $APP_START_DIR/$JAVATOOL_NAME.desktop
	rm -f /usr/bin/$REPAIRTOOL_NAME
	rm -f $APP_START_DIR/$REPAIRTOOL_NAME.desktop
	
	#后台开机启动脚本链接
	rm -f /etc/profile.d/$WD_DAEMON_NAME_SH
	rm -f $XDG_AUTOSTART_DIR/$WD_DAEMON_NAME.desktop
}


#终止正在运行的工僿
KillTool (){
	toollist=$(ps -ef | grep "$JAVATOOL_NAME_JAR" | grep -v grep | awk '{print $2}')
	if [ -n "$toollist" ];then
		echo "	WatchSAFE is runing, will stop it ..."
		echo $toollist | while read pid; do
			kill -9 $pid
		done
	fi
}

#终止正在运行的工僿
KillRepairTool (){
	toollist=$(ps -ef | grep "$REPAIRTOOL_NAME_JAR" | grep -v grep | awk '{print $2}')
	if [ -n "$toollist" ];then
		echo "	WatchSAFE is runing, will stop it ..."
		echo $toollist | while read pid; do
			kill -9 $pid
		done
	fi
}
#终止正在运行的UISvr
KillUISvr (){
	toollist=$(ps -ef | grep "$JAVAUISer_NAME_JAR" | grep -v grep | awk '{print $2}')
	if [ -n "$toollist" ];then
		echo "	ProxKeyUISvr is runing, will stop it ..."
		echo $toollist | while read pid; do
			kill -9 $pid
		done
	fi
}
#终止正在运行的后台
KillDaemon (){
	toollist=$(ps -ef | grep "$WD_DAEMON_NAME" | grep -v grep | awk '$9=="" {print $2}')
	if [ -n "$toollist" ];then
		echo "	WatchSAFE Daemon is runing, will stop it ..."
		echo $toollist | while read pid; do
			kill -9 $pid
		done
	fi
}

#终止已运行的服务
KillService () {

	#终止服务
	pidlist=$(ps -ef | grep "$DAEMON_NAME" | grep -v grep | awk '{print $2}')
	if [ -n "$pidlist" ];then
		echo "	$DAEMON_NAME is runing, will stop it ..."
		if [ -e $BIN_update_rc_d ]; then
		    service $DAEMON_NAME stop
		    sleep 01s

	    elif [ -e $BIN_chkconfig ]; then
		    service $DAEMON_NAME stop
		    sleep 01s

	    elif [ -e $BIN_insserv ]; then
		    service $DAEMON_NAME stop
		    sleep 01s
		fi
		
		#没有服务的话，直接终止进禿		
		pidlist=$(ps -ef | grep "$DAEMON_NAME" | grep -v grep | awk '{print $2}')
		if [ -n "$pidlist" ];then
			echo $pidlist | while read pid; do
				kill -9 $pid
			done
			sleep 02s
		fi

		#检查结朿		
		pidlist=$(ps -ef | grep "$DAEMON_NAME" | grep -v grep | awk '{print $2}')
		if [ -n "$pidlist" ];then
			echo "	can't stop $DAEMON_NAME."
			ErrFail
		else
			echo "	$DAEMON_NAME has been stoped."
		fi

	else
		echo "	there are no $DAEMON_NAME runing."
	fi


	#清理
	if [ -e /var/run/$DAEMON_NAME/$DAEMON_NAME.comm ]; then
		rm -f /var/run/$DAEMON_NAME/$DAEMON_NAME.comm
	fi
	if [ -e /var/run/$DAEMON_NAME/$DAEMON_NAME.pid ]; then
		rm -f /var/run/$DAEMON_NAME/$DAEMON_NAME.pid
	fi
	if [ -e /tmp/$DAEMON_NAME/$DAEMON_NAME.comm ]; then
		rm -f /tmp/$DAEMON_NAME/$DAEMON_NAME.comm
	fi
	if [ -e /tmp/$DAEMON_NAME/$DAEMON_NAME.pid ]; then
		rm -f /tmp/$DAEMON_NAME/$DAEMON_NAME.pid
	fi
}

#卸载服务
RemoveSrv() {
	if [ -e $BIN_update_rc_d ]; then
		echo "	using update-rc.d ..."
		$BIN_update_rc_d -f $DAEMON_NAME remove

	elif [ -e $BIN_chkconfig ]; then
		echo "	using chkconfig ..."
		$BIN_chkconfig --del $DAEMON_NAME

	elif [ -e $BIN_insserv ]; then
		echo "	using insserv ..."
		$BIN_insserv -r $DAEMON_NAME

	else
		echo " using WD sh..."

	fi

	if [ -e /etc/init.d/$DAEMON_NAME ]; then
		rm -f /etc/init.d/$DAEMON_NAME
	fi
	if [ -e /etc/rc.d/init.d/$DAEMON_NAME ]; then
		rm -f /etc/rc.d/init.d/$DAEMON_NAME
	fi
}

#统计子目录个擿
CountDirs(){
	i=0
	for dir in $1/*
	do
		if [ -d $dir ]; then
			let "i++"
		fi
	done
	return $i
}


# Begin Now !

echo ''
echo "	begin to uninstall $DAEMON_NAME ..."
echo ''

#获取系统信息
GetSystemInfo

#删除P11模块
$DDIR_BIN/P11ModelTool -delP11 "PROXKey Module" -allUsers

#关闭正在运行的工具
KillTool
KillRepairTool
#关闭正在运行的UISvr
KillUISvr
#关闭正在运行的后台
KillDaemon

#删除文件
echo '	delete files ...'
DelFile

#如果WatchData主目录下只剩下一个pcsc目录，就全部卸载
CountDirs $DDIR_WD

if [ $? -le 1 ]; then

	#终止已运行的服务
	echo "	find and kill $DAEMON_NAME in system ..."
	KillService

	#卸载已存在的服务
	if [ -e /etc/init.d/$DAEMON_NAME ]; then
		echo "	remove pcscd_wd service ..."
		RemoveSrv
	elif [ -e /etc/rc.d/init.d/$DAEMON_NAME ]; then
		echo "	remove pcscd_wd service ..."
		RemoveSrv
	fi

	#删除pcscd的链挿	
	rm -f /usr/sbin/$DAEMON_NAME
	rm -f /sbin/$DAEMON_NAME

	#删除watchdata主目廿	
	rm -fr $DDIR_WD
fi

echo ''
echo '	uninstall completed.'
echo ''

exit 0
