#!/bin/bash
# start-vce-install.sh v0.2 by CL
# modified: RLa				                      24 Juli 2018
# modified: TFe				                      21 Mai 2019

echo "-------------------------------------------------------------------"
echo "---                                                             ---"
echo "---                  vCE Installation Script                    ---"
echo "---                        v0.2 by CL                           ---"
echo "---                                                             ---"
echo "-------------------------------------------------------------------"


function set_vars()
{
	LIB_VCE=cl-lib.sh
	LIB_VALUES=vCE.values
	LIB_VARIABLES=variables.txt
}


function source_lib()
{
	if [ -f "$(pwd)/$LIB_VCE" ];then
		source $(pwd)/$LIB_VCE
	else
		echo -ne "\n!!! Sorry $LIB_VCE neither does exist in $(pwd)!!!\n" 
		echo -ne "\n\tPlease provide the library $LIB_VCE\n"
		exit 1
	fi

	if [ -f "$(pwd)/$LIB_VALUES" ];then
		source $(pwd)/$LIB_VALUES
	else
		echo -ne "\n!!! Sorry $LIB_VALUES neither does exist in $(pwd)!!!\n" 
		echo -ne "\n\tPlease provide the library $LIB_VALUES\n"
		exit 1
	fi

	if [ -f "/root/install/$LIB_VARIABLES" ];then
		source /root/install/$LIB_VARIABLES
	else
		echo -ne "\n!!! Sorry $LIB_VARIABLES neither does exist in /root/install!!!\n" 
		echo -ne "\n\tPlease provide the library $LIB_VARIABLES\n"
		exit 1
	fi
}

function collect_data()
{
	echo -ne "\n"
	echo "Sammle Daten, bitte warten..."
	echo -ne "\n"

	SCHOOL=$(get_school)
	AREA=$(get_area)
	ORG=$(get_org)
	TREE=$(get_tree)
}


function read_userpass()
{
	while [ -z $PASS ]
	do
		read PASS
		if [ -z $PASS ]; then
			echo "Leere Eingabe!"
		fi
	done
}

function cancel()
{
	PASS=
	echo "Abbruch";
}


function main()
{
	echo -ne "\nWas soll installiert werden?\n"
	OPTIONS="Unterrichtsnetz Verwaltungsnetz Exit"
	select opt in $OPTIONS;
	do
		if [ "$opt" = "Unterrichtsnetz" ]; then
			echo -ne "\nBitte Passwort fuer neuen Administrationsbenutzer (vceAdmin) eingeben:"
			read_userpass

			echo -ne "\nFolgende Werte wurden angegeben"
			echo -ne "\n#Schulname: $SCHOOL"
			echo -ne "\n#ZCM Server IP: $vceZENAppHost"
			echo -ne "\n#vceAdmin Passwort: $PASS"
			echo -ne "\nVorgang ausfuehren? [ OK (j) | Abbruch (n) ]"
			
			read var
			case $var in
				[YyJj]*) install_SN;;
				[Nn]*) cancel;;
			esac
		elif [ "$opt" = "Verwaltungsnetz" ]; then
			echo -ne "\nBitte Passwort fuer neuen Administrationsbenutzer (VNAdmin) eingeben:"
			read_userpass

			echo -ne "\nFolgende Werte wurden angegeben"
			echo -ne "\n#Schulname: $SCHOOL"
			echo -ne "\n#VNAdmin Passwort: $PASS"
			echo -ne "\nVorgang ausfuehren? [ OK (j) | Abbruch (n) ]"
			
			read var
			case $var in
				[YyJj]* ) install_VN;;
				[Nn]* ) cancel;;
			esac
		elif [ "$opt" = "Exit" ]; then
			exit
		else
			echo "Unknown option"
		fi
	done
}


function check_slp()
{
	if [ "$my_tree_type" = "new" ]; then
		echo -ne "--> Master eDirectory Server, setzen des SLP DirectoryAgent...\n"

		sed -i 's/'";net.slp.isDA = true"'/'"net.slp.isDA = true"'/g' /etc/slp.conf
		echo -ne "\nNeustarten des SLP Deamon...\n"
		rcslpd restart
		echo -ne "\nSLP DirectoryAgent ermitteln...\n"
		slptool findsrvs service:directory-agent


	elif [ "$my_tree_type" = "existing" ]; then
		echo -ne "--> Kein Master eDirectory Server, setzen des SLP DirectoryAgent nicht notwendig!\n" 
	else
		echo -ne "\n!!! Es wurde kein korrekter Wert fuer \"my_tree_type\" in $LIB_VARIABLES gefunden!!!\n" 
		exit 1
	fi
}


function install_SN()
{
	echo -ne "\n"
	echo "### Installation Unterrichtsnetz \"$SCHOOL\" ###"
	echo -ne "\n"
	
	check_slp

	echo -ne "\n"
	echo "--> Deaktivierung von \"Require TLS for Simple Binds with Password\"..."
	echo -ne "\n"

	ldapconfig set "Require TLS for Simple Binds with Password=no" -a Admin.Adm.$ORG

	echo -ne "\n"
	echo "--> Directory Schema wird erweitert..."
	echo -ne "\n"

	ndssch -F schema.log Admin.Adm.$ORG vCESchema-v4.sch
	
	echo -ne "\n"
	echo "--> eDirectory Struktur wird gebaut..."
	echo -ne "\n"

	sh create-vce-unterricht.sh --admin_dn cn=Admin,ou=Adm,o=$ORG --school $SCHOOL --area $AREA --org $ORG --zcm $vceZENAppHost --userpass $PASS
	
	echo -ne "\n"
	echo "--> vCE Verzeichnis Struktur wird angelegt..."
	echo -ne "\n"

	nss /VolumeActivate=DAT
	sh create-vce-unterricht_filesystem.sh --school $SCHOOL --area $AREA --org $ORG --tree $TREE
	
	echo -ne "\n"
	echo "--> Verzeichnis fuer Konfigurations-Datei wird erstellt..."
	echo -ne "\n"
	
	mkdir -p -v /opt/campuslan/vCE
	echo "Directory created"

	echo -ne "\n"
	echo "--> Konfigurations-Datei fuer vCE wird erstellt..."
	echo -ne "\n"

	sh create-vce-config.sh

	echo -ne "\n"
	echo "--> Konfigurations-Datei kopieren und Rechte anpassen..."
	echo -ne "\n"

	cp -p -v vCE.config /opt/campuslan/vCE
	chown -v root:root /opt/campuslan/vCE/vCE.config

	echo -ne "\n"
	echo "--> vCE wird installiert..."
	echo -ne "\n"

	tar -xzf vce39a.tgz
	cd vce-3.9
	sh install.sh

	echo -ne "\n"
	echo "--> vCE wird gestartet..."
	echo -ne "\n"

	rcvce start

	echo -ne "\n"
	echo "### Installation Unterrichtsnetz \"$SCHOOL\" erfolgreich! ###"
	echo -ne "\n"

	exit	
}

function install_VN()
{
	echo -ne "\n"
	echo "### Installation Verwaltungsnetz \"$SCHOOL\" ###"
	echo -ne "\n"
	
	check_slp

	echo -ne "\n"
	echo "--> eDirectory Struktur wird gebaut..."
	echo -ne "\n"

	sh create-vce-verwaltung.sh --admin_dn cn=Admin,ou=Adm,o=$ORG --school $SCHOOL --area $AREA --org $ORG --userpass $PASS
	
	echo -ne "\n"
	echo "--> Verzeichnis Struktur wird angelegt..."
	echo -ne "\n"

	nss /VolumeActivate=DAT
	sh create-vce-verwaltung_filesystem.sh --school $SCHOOL --area $AREA --org $ORG --tree $TREE
	
	echo -ne "\n"
	echo "### Installation Verwaltungsnetz \"$SCHOOL"\ erfolgreich! ###"
	echo -ne "\n"

	exit	
}

function askValues()
{

                        echo -ne "\nWurde die vCE.Values Datei angepasst?"
                        echo -ne "\n"
                        echo -ne "\n"
                        echo -ne "\n [ OK (j) | Abbruch (n) ]"

                        read vara
                        case $vara in
                                [YyJj]* ) echo -ne "OK";;
                                [Nn]* ) exit;;
                        esac
}

set_vars
source_lib
askValues
collect_data
main


