#!/bin/bash

API_BASE_URL=https://labguiws.foo.local/api/1.0

function getTokenJSON() {
    echo `curl -s -k --max-time 10 -X POST -H "Content-Type: application/json" -d "{\"login\":\"guest\",\"pwd\":\"\"}" ${API_BASE_URL}/login`
}


function jsonValue() {
    KEY=$1
    num=$2
    awk -F"[,:}]" '{for(i=1;i<=NF;i++){if($i~/'$KEY'\042/){print $(i+1)}}}' | tr -d '"' | sed -n ${num}p
}


stop() {
    echo "STOP ESAME-GET-CONFIG"
    #rm /local/esame-machine.conf
    #rm /local/iptables
}


start() {
    echo "START ESAME-GET-CONFIG"

    TOKEN_JSON=$(getTokenJSON)
    TOKEN=`echo ${TOKEN_JSON} | jsonValue token 1`
    MACHINE_NAME=`hostname`
    MACHINE_JSON=`/usr/bin/curl -s -k --max-time 10 -H "Authorization: Bearer ${TOKEN}" -X GET ${API_BASE_URL}/machines/name/${MACHINE_NAME}`
    MACHINE_ID=`echo $MACHINE_JSON | jsonValue id 1`
    MACHINE_CONFIGS_ID=`echo $MACHINE_JSON | jsonValue configs_id 1`
    
    MACHINE_CONFIGS_ID_PREV=''
    if [[ -e /local/config_id ]]
    then
        MACHINE_CONFIGS_ID_PREV=`cat /local/config_id`
    fi
    
    echo "TOKEN_JSON: $TOKEN_JSON"
    echo "TOKEN: $TOKEN"
    echo "MACHINE_NAME: $MACHINE_NAME"
    echo "MACHINE_JSON: $MACHINE_JSON"
    echo "MACHINE_ID: $MACHINE_ID"
    echo "MACHINE_CONFIGS_ID: $MACHINE_CONFIGS_ID"
    echo "MACHINE_CONFIGS_ID_PREV: $MACHINE_CONFIGS_ID_PREV"

    # non sono riuscito a contattatare il ws
    if [[ "$MACHINE_CONFIGS_ID" == "" ]]
    then
		echo "Errore: WS non raggiungibile o credenziali errate"
		exit 1
	fi
	
	# back config files up
	cp -f /local/esame-machine.conf /local/esame-machine.conf.prev 2>&1
	cp -f /local/iptables /local/iptables.prev 2>&1
	
	# get configuration file
	HTTP_STATUS=`/usr/bin/curl -s -k -w "%{http_code}" -o /local/esame-machine.conf --max-time 10 --header "Authorization: Bearer ${TOKEN}" -X GET ${API_BASE_URL}/machines/${MACHINE_ID}/configfile`
	if [[ $HTTP_STATUS -ne 200 ]]
	then
		exit 1
	else
		echo "Downloaded config file (http_status=$HTTP_STATUS)"
	fi
	
	# get ipconfig file
	HTTP_STATUS=`/usr/bin/curl -s -k -w "%{http_code}" -o /local/iptables --max-time 10 --header "Authorization: Bearer ${TOKEN}" -X GET ${API_BASE_URL}/machines/${MACHINE_ID}/ipconfigfile`
	if [[ $HTTP_STATUS -ne 200 ]]
	then
		exit 1
	else
		echo "Downloaded iptables config file (http_status=$HTTP_STATUS)"
	fi

	# configuration profile is changed
	if [[ "$MACHINE_CONFIGS_ID" != "$MACHINE_CONFIGS_ID_PREV" ]]
	then
		# update config_id file
		echo ${MACHINE_CONFIGS_ID} > /local/config_id

		# no exam, set normal target
		if [[ "$MACHINE_CONFIGS_ID" -eq "0" ]]
		then
			# stop some services to revert system files
			/usr/bin/systemctl stop esame-kioskmode
			/usr/bin/systemctl stop esame-kdm-autologin
			rm /local/esame-machine.conf 2>&1
			rm /local/esame-machine.conf.prev 2>&1
			rm /local/iptables 2>&1
			rm /local/iptables.prev 2>&1
			echo "Normal!"
			/usr/bin/systemctl set-default graphical.target
			reboot
		else                
			echo "Exam!"
			/usr/bin/systemctl set-default esame.target
			reboot
		fi
	fi

	if [[ "$MACHINE_CONFIGS_ID" -ne "0" ]]
	then
		# check if parameters are changed
		cmp --silent /local/esame-machine.conf /local/esame-machine.conf.prev
		if [[ $? -ne 0 ]]
		then
			/usr/bin/systemctl daemon-reload
			echo "Configuration parameters changed: start some services again... "
			# restart some exam services
			echo -n "USB..."
			/usr/bin/systemctl start esame-usb
			echo " done."
			echo -n "Firefox home..."
			/usr/bin/systemctl start esame-firefox-home
			echo " done."
			echo
			echo "All done."
		fi
	fi
	
	#/usr/bin/systemctl stop esame-get-config
}


args=("$@")

case "$1" in
'start')
	start
	;;
'stop')
	stop
	;;
'restart')
	stop
	start
	;;
*)
	echo "Usage: $0 { start | stop | restart }";
	exit 1;
	;;
esac
exit 0