#!/bin/bash
#set -x
PRG_Version="2024.04.11-01"
SCRIPT_Name="lmz-opsi-patch-00007"
# DEBUG 
#SCRIPT_DEBUG="false"
SCRIPT_DEBUG="true"
### ***************************************
###   Wichtige Operationen ganz am Anfang
### ***************************************
# Kommandozeilenparameter sichern
ARGS_ARRAY=("$@")
ARGS_NUM_ITEMS="$#"
# Zeile 15 - ab hier Bibliothek einbinden oder Code kopieren
lmz_bib_file="/etc/paedML/base/bin/lmz_funktionsbibliothek.sh"
source "${lmz_bib_file}" &>/dev/null
if [ $? -ne 0 ]; then
	printf "Es ist ein Fehler aufgetreten. Das Skript kann nicht ausgefuehrt werden.\n" 
	printf "Fehlernummer: 99990003\n"
	printf "Fehlertext:   Funktionsbibliothek konnte nicht geladen werden.\n"
	printf "Details:      \n"
	printf "  Dateiname:  '"${lmz_bib_file}"'\n"
	printf "  Skript:     '"${SCRIPT_Name}"'\n"
	printf "  Version:    '"${PRG_Version}"'\n"
	exit 14
fi
#
#
# Zeile 30 - ab hier fängt das eigentliche Patch-Programm an...

### PATCH *** Anfang
PATCH_Nummer="00007"
PATCH_VERSION="$PRG_Version"
PATCH_Titel="Winstskin einrichten."
PATCH_DESCRIPTION="Anpassen des opsi-client-agent an Corporate Identity (CI) vom LMZ.\nEs werden Dateien unter //opsi_depot/opsi-client-agent/files/custom ersetzt."
### PATCH *** Ende

# Aufruf
# -a apply      Rückgabewert 0 = OK, 1 = Fehler
# -c chech      Rückgabewert 0 = OK, 1 = needs to be installed

do_install() {
	local install_result
	local command_output
	local command_output2
	local retval
	local file_line
	install_result=0
	echo "Installiere '${SCRIPT_Name}' (${PRG_Version})..."
	schreibe_log "Installiere '${SCRIPT_Name}' (${PRG_Version})..."
	# -a apply      Rückgabewert 0 = OK, 1 = Fehler


		case "${opsi_version}" in
			4.1|4.2) 	# opsi 4.1 oder 4.2
				# Dateien kopieren
					sudo cp -rf "/etc/paedML/patches/bin/files/00007/custom4142/." "/var/lib/opsi/depot/opsi-client-agent/files/custom/"
					# rechte setzen
					sudo opsi-setup --set-rights /var/lib/opsi/depot/opsi-client-agent
					# fertig
				;;
			4.3)	# opsi 4.3
					sudo cp -rf "/etc/paedML/patches/bin/files/00007/custom43/." "/var/lib/opsi/depot/opsi-client-agent/files/custom/"
					# rechte setzen
					sudo opsi-set-rights /var/lib/opsi/depot/opsi-client-agent
					# fertig
				;;
			*)
				schreibe "Diese opsi-Version kennt das Skript nicht. Keine Installation moeglich.\n"
				;;
		esac
	echo "Installation beendet."
	schreibe_log "Installation beendet."
}

do_check() {
	local check_result
	local retval
	local TMP_Vorlage
	local TMP_Ziel
	check_result="0"
	echo "Pruefe '${SCRIPT_Name}' (${PRG_Version})..."
	schreibe_log "Pruefe '${SCRIPT_Name}' (${PRG_Version})..."
	# -c check      Rückgabewert 0 = OK, 1 = needs to be installed
		case "${opsi_version}" in
			4.1|4.2) 	# opsi 4.1 oder 4.2
				# 001 opsi-client-agent - custom/lmz-opsi-winstskin.version
					if [ -e "/var/lib/opsi/depot/opsi-client-agent/files/custom/lmz-opsi-winstskin.version" ]; then
						# Dateien vergleichen
						cmp --silent "/var/lib/opsi/depot/opsi-client-agent/files/custom/lmz-opsi-winstskin.version" "/etc/paedML/patches/bin/files/00007/custom4142/lmz-opsi-winstskin.version"
						retval=$?
						if [[ $retval -ne 0 ]]; then
							schreibe "NTBI: Datei '/var/lib/opsi/depot/opsi-client-agent/files/custom/lmz-opsi-winstskin.version' ist nicht mit der Vorlage identisch. Austausch erforderlich.\n"
							check_result="1"
						else
							schreibe "OK: Datei '/var/lib/opsi/depot/opsi-client-agent/files/custom/lmz-opsi-winstskin.version' ist mit der Vorlage identisch.\n"
						fi
					else
						schreibe "NTBI: Datei '/var/lib/opsi/depot/opsi-client-agent/files/custom/lmz-opsi-winstskin.version' fehlt.\n"
						check_result="1"
					fi
				# 002 opsi-client-agent - custom/winstskin/bg.png
					if [ -e "/var/lib/opsi/depot/opsi-client-agent/files/custom/winstskin/bg.png" ]; then
						# Dateien vergleichen
						cmp --silent "/var/lib/opsi/depot/opsi-client-agent/files/custom/winstskin/bg.png" "/etc/paedML/patches/bin/files/00007/custom4142/winstskin/bg.png"
						retval=$?
						if [[ $retval -ne 0 ]]; then
							schreibe "NTBI: Datei '/var/lib/opsi/depot/opsi-client-agent/files/custom/winstskin/bg.png' ist nicht mit der Vorlage identisch. Austausch erforderlich.\n"
							check_result="1"
						else
							schreibe "OK: Datei '/var/lib/opsi/depot/opsi-client-agent/files/custom/winstskin/bg.png' ist mit der Vorlage identisch.\n"
						fi
					else
						schreibe "NTBI: Datei '/var/lib/opsi/depot/opsi-client-agent/files/custom/winstskin/bg.png' fehlt.\n"
						check_result="1"
					fi
				# 003 opsi-client-agent - custom/notifier/event.bmp
					if [ -e "/var/lib/opsi/depot/opsi-client-agent/files/custom/notifier/event.bmp" ]; then
						# Dateien vergleichen
						cmp --silent "/var/lib/opsi/depot/opsi-client-agent/files/custom/notifier/event.bmp" "/etc/paedML/patches/bin/files/00007/custom4142/notifier/event.bmp"
						retval=$?
						if [[ $retval -ne 0 ]]; then
							schreibe "NTBI: Datei '/var/lib/opsi/depot/opsi-client-agent/files/custom/notifier/event.bmp' ist nicht mit der Vorlage identisch. Austausch erforderlich.\n"
							check_result="1"
						else
							schreibe "OK: Datei '/var/lib/opsi/depot/opsi-client-agent/files/custom/notifier/event.bmp' ist mit der Vorlage identisch.\n"
						fi
					else
						schreibe "NTBI: Datei '/var/lib/opsi/depot/opsi-client-agent/files/custom/notifier/event.bmp' fehlt.\n"
						check_result="1"
					fi	
					;;
			4.3)	# opsi 4.3
				# 001 opsi-script - custom/lmz-opsi-skin.version
					TMP_Vorlage="/etc/paedML/patches/bin/files/00007/custom43/lmz-opsi-skin.version"
					TMP_Ziel="/var/lib/opsi/depot/opsi-client-agent/files/custom/lmz-opsi-skin.version"
					if [ -e "${TMP_Ziel}" ]; then
						# Dateien vergleichen
						cmp --silent "${TMP_Ziel}" "${TMP_Vorlage}"
						retval=$?
						if [[ $retval -ne 0 ]]; then
							schreibe "NTBI: Datei '${TMP_Ziel}' ist nicht mit der Vorlage identisch. Austausch erforderlich.\n"
							check_result="1"
						else
							schreibe "OK: Datei '${TMP_Ziel}' ist mit der Vorlage identisch.\n"
						fi
					else
						schreibe "NTBI: Datei '/${TMP_Ziel}' fehlt.\n"
						check_result="1"
					fi
				# 002 opsi-script - custom/opsi-script/skin/bg_LMZ.png
					TMP_Vorlage="/etc/paedML/patches/bin/files/00007/custom43/opsi-script/skin/bg_LMZ.png"
					TMP_Ziel="/var/lib/opsi/depot/opsi-client-agent/files/custom/opsi-script/skin/bg_LMZ.png"
					if [ -e "${TMP_Ziel}" ]; then
						# Dateien vergleichen
						cmp --silent "${TMP_Ziel}" "${TMP_Vorlage}"
						retval=$?
						if [[ $retval -ne 0 ]]; then
							schreibe "NTBI: Datei '${TMP_Ziel}' ist nicht mit der Vorlage identisch. Austausch erforderlich.\n"
							check_result="1"
						else
							schreibe "OK: Datei '${TMP_Ziel}' ist mit der Vorlage identisch.\n"
						fi
					else
						schreibe "NTBI: Datei '/${TMP_Ziel}' fehlt.\n"
						check_result="1"
					fi
				# 003 opsi-script - custom/opsi-script/skin/skin.ini
					TMP_Vorlage="/etc/paedML/patches/bin/files/00007/custom43/opsi-script/skin/skin.ini"
					TMP_Ziel="/var/lib/opsi/depot/opsi-client-agent/files/custom/opsi-script/skin/skin.ini"
					if [ -e "${TMP_Ziel}" ]; then
						# Dateien vergleichen
						cmp --silent "${TMP_Ziel}" "${TMP_Vorlage}"
						retval=$?
						if [[ $retval -ne 0 ]]; then
							schreibe "NTBI: Datei '${TMP_Ziel}' ist nicht mit der Vorlage identisch. Austausch erforderlich.\n"
							check_result="1"
						else
							schreibe "OK: Datei '${TMP_Ziel}' ist mit der Vorlage identisch.\n"
						fi
					else
						schreibe "NTBI: Datei '/${TMP_Ziel}' fehlt.\n"
						check_result="1"
					fi
				# 004 notifier - custom/notifier/event_LMZ.bmp
					TMP_Vorlage="/etc/paedML/patches/bin/files/00007/custom43/notifier/event_LMZ.bmp"
					TMP_Ziel="/var/lib/opsi/depot/opsi-client-agent/files/custom/notifier/event_LMZ.bmp"
					if [ -e "${TMP_Ziel}" ]; then
						# Dateien vergleichen
						cmp --silent "${TMP_Ziel}" "${TMP_Vorlage}"
						retval=$?
						if [[ $retval -ne 0 ]]; then
							schreibe "NTBI: Datei '${TMP_Ziel}' ist nicht mit der Vorlage identisch. Austausch erforderlich.\n"
							check_result="1"
						else
							schreibe "OK: Datei '${TMP_Ziel}' ist mit der Vorlage identisch.\n"
						fi
					else
						schreibe "NTBI: Datei '/${TMP_Ziel}' fehlt.\n"
						check_result="1"
					fi				
				# 005 notifier - custom/notifier/event.ini
					TMP_Vorlage="/etc/paedML/patches/bin/files/00007/custom43/notifier/event.ini"
					TMP_Ziel="/var/lib/opsi/depot/opsi-client-agent/files/custom/notifier/event.ini"
					if [ -e "${TMP_Ziel}" ]; then
						# Dateien vergleichen
						cmp --silent "${TMP_Ziel}" "${TMP_Vorlage}"
						retval=$?
						if [[ $retval -ne 0 ]]; then
							schreibe "NTBI: Datei '${TMP_Ziel}' ist nicht mit der Vorlage identisch. Austausch erforderlich.\n"
							check_result="1"
						else
							schreibe "OK: Datei '${TMP_Ziel}' ist mit der Vorlage identisch.\n"
						fi
					else
						schreibe "NTBI: Datei '/${TMP_Ziel}' fehlt.\n"
						check_result="1"
					fi	
				# 006 notifier - custom/notifier/userlogin.ini
					TMP_Vorlage="/etc/paedML/patches/bin/files/00007/custom43/notifier/userlogin.ini"
					TMP_Ziel="/var/lib/opsi/depot/opsi-client-agent/files/custom/notifier/userlogin.ini"
					if [ -e "${TMP_Ziel}" ]; then
						# Dateien vergleichen
						cmp --silent "${TMP_Ziel}" "${TMP_Vorlage}"
						retval=$?
						if [[ $retval -ne 0 ]]; then
							schreibe "NTBI: Datei '${TMP_Ziel}' ist nicht mit der Vorlage identisch. Austausch erforderlich.\n"
							check_result="1"
						else
							schreibe "OK: Datei '${TMP_Ziel}' ist mit der Vorlage identisch.\n"
						fi
					else
						schreibe "NTBI: Datei '/${TMP_Ziel}' fehlt.\n"
						check_result="1"
					fi	
				;;
			*)
				schreibe "Diese opsi-Version kennt das Skript nicht. Keine Installation moeglich.\n"
				;;
		esac
	# fertig
	if [[ "${check_result}" == "0" ]]; then
		schreibe "${GREEN}Fazit:${NC} Der Patch '${SCRIPT_Name}' wird nicht benoetigt bzw. wurde bereits installiert.\n"
		return 0
	else
		schreibe "${YELLOW}Fazit:${NC} Der Patch '${SCRIPT_Name}' sollte installiert werden.\n"
		return 1
	fi	
}

parseParameters() {
# Analyse der Kommandozeilenparameter
# Quelle: https://dzone.com/articles/bash-snippet-parsing-command-line-arguments-and-as
#         angepasst.
	local key
	local temp_pds
	local retval
	if [[ $# -eq 1 ]]; then
		# Argument(e) vorhanden
		key="${1}"
		#echo $key
		case "${key}" in
		-a|--apply)
			do_install
			retval=$?
			exit $retval
			;;
		-c|--check)
			do_check
			retval=$?
			exit $retval
			;;
		-h|--help)
			echo "lmz-opsi-patch: '${PATCH_Nummer}'  (Version ${PRG_Version})."		
			echo "Kommandos:"
			echo "  -a, --apply                               Diesen Patch manuell installieren."
			echo "  -c, --check                               Diesen Patch manuell überprüfen."
			echo "  -i, --info                                Gibt Informationen aus."
			echo ""
			echo "Bitte wenden Sie das Tool 'lmz-opsi-patches' an, um Patches zu installieren."
			echo " lmz-opsi-patches --apply '${PATCH_Nummer}'           ...installiert diesen Patch."
			echo " lmz-opsi-patches --info '${PATCH_Nummer}'            ...gibt weitere Informationen"
			echo "                                               zu diesem Patch aus."
			echo ""
			echo ""
			;;
		-i|--info)
			printf "Patchnummer:  ${PATCH_Nummer}\n"
			printf "Titel:        ${PATCH_Titel}\n"
			printf "Version:      ${PRG_Version}\n"
			# description
			temp_pds="${PATCH_DESCRIPTION//\"}"
			temp_pds="${temp_pds//\\n/\\n              }"
			printf "Beschreibung: ${temp_pds}\n"
			;;
		*) # unknown option
			echo "No valid parameters given."
			exit 55
			;;
		esac
	else
		# keine Argumente uebergeben
		echo "No parameters given."
		exit 55 
	fi
}

# MAIN

parseParameters $*

exit 0


