Skip to content
Snippets Groups Projects
get-config 4.84 KiB
Newer Older
  • Learn to ignore specific revisions
  • Alberto LIVIO BECCARIA's avatar
    Alberto LIVIO BECCARIA committed
    #!/bin/bash
    
    
    API_BASE_URL=https://labmanager-api.edu-al.unipmn.it/api/1.0
    
    Alberto LIVIO BECCARIA's avatar
    Alberto LIVIO BECCARIA committed
    
    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
    
    Alberto LIVIO BECCARIA's avatar
    Alberto LIVIO BECCARIA committed
    }
    
    
    stop() {
        echo "STOP ESAME-GET-CONFIG"
    }
    
    
    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`
    
    Alberto LIVIO BECCARIA's avatar
    Alberto LIVIO BECCARIA committed
        MACHINE_CONFIGS_ID_PREV=''
        if [[ -e /local/config_id ]]
        then
            MACHINE_CONFIGS_ID_PREV=`cat /local/config_id`
        fi
    
    Alberto LIVIO BECCARIA's avatar
    Alberto LIVIO BECCARIA committed
        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 "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
    
        # 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
    
        # 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
    
        # 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
    
                /usr/bin/systemctl stop esame-virtualbox
    
                /usr/bin/systemctl stop esame-nfs
    
                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
        else
            # 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
    
                echo "Updated current config (http_status=$HTTP_STATUS)"
            fi
        fi
    
        # Runtime parameters
        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: 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
    
    Alberto LIVIO BECCARIA's avatar
    Alberto LIVIO BECCARIA committed
    }
    
    
    args=("$@")
    
    case "$1" in
    'start')
    
    Alberto LIVIO BECCARIA's avatar
    Alberto LIVIO BECCARIA committed
    'stop')
    
    Alberto LIVIO BECCARIA's avatar
    Alberto LIVIO BECCARIA committed
    'restart')
    
        echo "Usage: $0 { start | stop | restart }";
        exit 1;
        ;;
    
    Alberto LIVIO BECCARIA's avatar
    Alberto LIVIO BECCARIA committed
    esac
    exit 0