#!/bin/bash

#/**
#@file	  ogagentqueue.cron
#@brief   Cronfile to send pending operations to OGAgent.
#warning  This file must be executed under system Cron every minute.
#@version 1.1.0 - Initial version.
#@date    2017-10-26
#@author  Ramón M. Gómez - Univ. Sevilla
#*/ ##


# Variables.
PROG=$(basename "$0")
OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg

source $OPENGNSYS/lib/ogfunctions.sh || exit 1

# Basic error control
source $SERVERCONF 2> /dev/null || raiseError access "Server configuration file"

# Reading pending operations.
dbexec "
SELECT ogagent_queue.id, ogagent_queue.exectime, ogagent_queue.operation,
       ordenadores.idordenador, ordenadores.ip, ordenadores.agentkey, remotepc.language
  FROM ogagent_queue
  JOIN ordenadores ON ogagent_queue.clientid=ordenadores.idordenador
  JOIN remotepc ON ogagent_queue.clientid=remotepc.id
 WHERE exectime < NOW()
 ORDER BY exectime;" | \
    while read -r OPERID DATE TIME OPER CLNTID AGNTIP AGNTKEY LANGUAGE; do
        # Preparing operation data.
        case "$OPER" in
            popup-10)   # Message: 10 min. before power off.
                AGNTURL="https://$AGNTIP:8000/opengnsys/popup"
                case "$LANGUAGE" in
                    es)     DATA='{"title":"Apagado en 10 min.","message":"Fin del tiempo de acceso remoto.\nEl ordenador se apagará automáticamente dentro de 10 minutos."}' ;;
                    *)      DATA='{"title":"Shutdown after 10 min.","message":"Remote access time is ended.\nComputer will be powered off automaticly after 10 minutes."}' ;;
                esac
                ;;
            popup-5)    # Message: 5 min. before power off.
                AGNTURL="https://$AGNTIP:8000/opengnsys/popup"
                case "$LANGUAGE" in
                    es)     DATA='{"title":"Apagado en 5 min.","message":"El ordenador se apagará automáticamente dentro de 5 minutos.\nATENCIÓN: Este es el último aviso."}' ;;
                    *)      DATA='{"title":"Shutdown after 5 min.","message":"The computer will be powered off automaticly after 5 minutes.\nATTENTION: This is the last warning."}'
                esac
                ;;
            poweroff)   # Power off client.
                AGNTURL="https://$AGNTIP:8000/opengnsys/poweroff"
                DATA=
                ;;
            *)          # Unknown operation.
                AGNTURL=
                ;;
        esac
        # Sending operation to OGAgent.
        if [ -n "$AGNTURL" ]; then
            CODE=$(curl -ksm 1 -w "%{http_code}" -o /dev/null -H "Authorization: $AGNTKEY" ${DATA:+"-d $DATA"} "$AGNTURL")
            case "$CODE" in
                000)    # Client does not respond (may be halted).
                    ;;
                200)    # Operation sent.
                    echolog "Operation sent to OGAgent: client=$AGNTIP, oper=$OPER, exectime=\"$DATE $TIME\"" ;;
                *)      # Operation error.
                    echolog "Operation error: client=$AGNTIP, oper=$OPER, code=$CODE" ;;
            esac
        else	# Unknown operation.
            echolog "Unknown operation: client=$AGNTIP, oper=$OPER"
        fi
        # Deleting operation from the database.
        SQL="DELETE FROM ogagent_queue WHERE id='$OPERID';"
        [ "$OPER" == "poweroff" ] && SQL+="
UPDATE remotepc
   SET reserved = NOW() - INTERVAL 1 SECOND, urllogin=NULL, urllogout=NULL, language=NULL
 WHERE id = '$CNLTID';
DELETE FROM acciones
 WHERE idordenador = '$CLNTID'
   AND descriaccion = 'RemotePC Session';"
        dbexec "$SQL"
    done
