Newer
Older
API_BASE_URL=https://labmanager-api.edu-al.unipmn.it/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~/\042'$KEY'\042/){print $(i+1)}}}' | tr -d '"' | sed -n ${num}p
}
stop() {
echo "STOP ESAME-GET-CONFIG"
}
getConfigVars() {
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`
CONFIG_NAME=`echo $MACHINE_JSON | jsonValue name 2`
CONFIG_NAME_PREV=''
if [[ -e /local/config_name ]]
CONFIG_NAME_PREV=`cat /local/config_name`
getConfigFile() {
# 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
echo "Error downloading config file (http_status=$HTTP_STATUS)"
exit 1
else
echo "Downloaded config file (http_status=$HTTP_STATUS)"
fi
getIpConfigFile() {
# 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
echo "Error downloading iptables config file (http_status=$HTTP_STATUS)"
exit 1
else
echo "Downloaded iptables config file (http_status=$HTTP_STATUS)"
fi
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
}
updateCurrentConfigId() {
# Update this machine's current config id
HTTP_STATUS=`/usr/bin/curl -s -k -w "%{http_code}" -o /dev/null --max-time 10 -H "Content-Type: application/json" -H "Authorization: Bearer ${TOKEN}" \
-X PUT -d "{\"current_configs_id\":\"$MACHINE_CONFIGS_ID\"}" ${API_BASE_URL}/machines/${MACHINE_ID}/currentconfig`
if [[ $HTTP_STATUS -ne 200 ]]
then
echo "Error updating current config (http_status=$HTTP_STATUS)"
exit 1
else
echo "Updated current config (http_status=$HTTP_STATUS)"
fi
}
start() {
echo "START ESAME-GET-CONFIG"
getConfigVars
#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"
echo "Configuration: $CONFIG_NAME"
# non sono riuscito a contattare il ws
if [[ "$CONFIG_NAME" == "" ]]
then
echo "Error: WS unreachable or wrong credentials"
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
getConfigFile
getIpConfigFile
# configuration profile is changed
if [[ "$CONFIG_NAME" != "$CONFIG_NAME_PREV" ]]

Alberto LIVIO BECCARIA
committed
# stop the timer to avoid executing this script again before the boot
#/usr/bin/systemctl stop esame-apply-config.timer
# update config_name file
echo ${CONFIG_NAME} > /local/config_name
# no exam, set normal target
if [[ "$CONFIG_NAME" == "normale" ]]
then
# stop some services to revert system files
#/usr/bin/systemctl stop esame-kioskmode
#/usr/bin/systemctl stop esame-kdm-autologin
#/usr/bin/systemctl stop esame-virtualbox
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!"
#systemctl isolate graphical && exit 0
#/usr/bin/systemctl set-default graphical.target
/usr/bin/systemctl reboot
#--force
else
echo "Exam!"
#systemctl isolate esame.target && exit 0
#/usr/bin/systemctl set-default esame.target
/usr/bin/systemctl reboot
#--force
# at boot time choose the correct target
if [[ "$1" == "boot" ]]
# we have just rebooted, update the current configuration via web service
updateCurrentConfigId
case "$CONFIG_NAME" in
'normale') # normal
systemctl isolate graphical.target && exit 0
;;
'kiosk-dir' | 'kiosk-dir-esami' | 'kiosk-escher' | 'kiosk-freebrowsing' | 'kiosk-teco') # kiosk mode
systemctl isolate esamekiosk.target && exit 0
;;
*) # all full desktop exams
systemctl isolate esame.target && exit 0
;;
esac
fi
fi
# Runtime parameters
if [[ "$CONFIG_NAME" != "normale" ]]
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: restart some services... "
# restart some exam services
echo -n "USB..."
/usr/bin/systemctl restart esame-usb
echo " done."
echo -n "Firefox home..."
/usr/bin/systemctl restart esame-firefox-home
echo " done."
echo
echo "All done."
fi
fi
'boot')
start "boot"
;;
stop
start
;;
echo "Usage: $0 { boot | start | stop | restart }";
exit 1;
;;