summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--admin/Database/ogAdmBD-1.1.0pre.sql9
-rw-r--r--admin/Database/ogAdmBD.sql1
-rw-r--r--admin/WebConsole/rest/ogagent.php16
-rwxr-xr-xserver/bin/ogagentqueue.cron96
4 files changed, 71 insertions, 51 deletions
diff --git a/admin/Database/ogAdmBD-1.1.0pre.sql b/admin/Database/ogAdmBD-1.1.0pre.sql
index e9ec87e6..8b68899d 100644
--- a/admin/Database/ogAdmBD-1.1.0pre.sql
+++ b/admin/Database/ogAdmBD-1.1.0pre.sql
@@ -223,16 +223,17 @@ ALTER TABLE aulas
MODIFY puestos SMALLINT DEFAULT NULL;
# Nuevas tablas para datos del proyecto Remote PC y operaciones de OGAgent (ticket #708).
-CREATE TABLE IF NOT EXISTS remotepc (
+DROP TABLE IF EXISTS remotepc;
+CREATE TABLE remotepc (
id INT(11) NOT NULL,
reserved DATETIME DEFAULT NULL,
urllogin VARCHAR(100),
urllogout VARCHAR(100),
+ language VARCHAR(5),
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-ALTER TABLE remotepc
- MODIFY reserved DATETIME DEFAULT NULL;
-CREATE TABLE IF NOT EXISTS ogagent_queue (
+DROP TABLE IF EXISTS ogagent_queue;
+CREATE TABLE ogagent_queue (
id INT(11) NOT NULL AUTO_INCREMENT,
clientid INT(11) NOT NULL,
exectime DATETIME DEFAULT NULL,
diff --git a/admin/Database/ogAdmBD.sql b/admin/Database/ogAdmBD.sql
index 55f11a2b..c126f63c 100644
--- a/admin/Database/ogAdmBD.sql
+++ b/admin/Database/ogAdmBD.sql
@@ -791,6 +791,7 @@ CREATE TABLE `remotepc` (
`reserved` datetime DEFAULT NULL,
`urllogin` varchar(100),
`urllogout` varchar(100),
+ `language` varchar(5),
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
diff --git a/admin/WebConsole/rest/ogagent.php b/admin/WebConsole/rest/ogagent.php
index 26de8a10..f2e8d5d9 100644
--- a/admin/WebConsole/rest/ogagent.php
+++ b/admin/WebConsole/rest/ogagent.php
@@ -136,6 +136,9 @@ $app->post('/ogagent/loggedin',
$input = json_decode($app->request()->getBody());
$ip = htmlspecialchars($input->ip);
$user = htmlspecialchars($input->user);
+ $language = isset($input->language) ? substr($input->language, 0, strpos($input->language, "_")) : "";
+ if (isset($input->ostype)) $osType = htmlspecialchars($input->ostype);
+ if (isset($input->osversion)) $osVersion = str_replace(",", ";", htmlspecialchars($input->osversion));
// Check sender IP address consistency (same as parameter value).
if (empty(preg_match('/^python-requests\//', $_SERVER['HTTP_USER_AGENT'])) or $ip !== $_SERVER['REMOTE_ADDR']) {
throw new Exception("Bad OGAgent: ip=$ip, sender=".$_SERVER['REMOTE_ADDR'].", agent=".$_SERVER['HTTP_USER_AGENT']);
@@ -161,7 +164,7 @@ EOD;
$rs->Cerrar();
if (!is_null($id)) {
// Log activity, respond to client and continue processing.
- writeLog("User logged in: ip=$ip, user=$user.");
+ writeLog("User logged in: ip=$ip, user=$user, lang=$language, os=$osType:$osVersion.");
$response = "";
jsonResponseNow(200, $response);
} else {
@@ -174,6 +177,13 @@ EOD;
// ... (check response)
//if ($result[0]['code'] != 200) {
// ...
+ // Updating user's session language for messages.
+ $cmd->texto = <<<EOD
+UPDATE remotepc
+ SET language = '$language'
+ WHERE id = '$id';
+EOD;
+ $cmd->Ejecutar();
}
} else {
throw new Exception("Database error");
@@ -205,6 +215,8 @@ $app->post('/ogagent/loggedout',
$input = json_decode($app->request()->getBody());
$ip = htmlspecialchars($input->ip);
$user = htmlspecialchars($input->user);
+ if (isset($input->ostype)) $osType = htmlspecialchars($input->ostype);
+ if (isset($input->osversion)) $osVersion = str_replace(",", ";", htmlspecialchars($input->osversion));
// Check sender agent type and IP address consistency (same as parameter value).
if (empty(preg_match('/^python-requests\//', $_SERVER['HTTP_USER_AGENT'])) or $ip !== $_SERVER['REMOTE_ADDR']) {
throw new Exception("Bad OGAgent: ip=$ip, sender=".$_SERVER['REMOTE_ADDR'].", agent=".$_SERVER['HTTP_USER_AGENT']);
@@ -230,7 +242,7 @@ EOD;
$rs->Cerrar();
if (!is_null($id)) {
// Log activity, respond to client and continue processing.
- writeLog("User logged out: ip=$ip, user=$user.");
+ writeLog("User logged out: ip=$ip, user=$user, os=$osType:$osVersion.");
$response = "";
jsonResponseNow(200, $response);
} else {
diff --git a/server/bin/ogagentqueue.cron b/server/bin/ogagentqueue.cron
index 54a9a2b9..0cf0dd5d 100755
--- a/server/bin/ogagentqueue.cron
+++ b/server/bin/ogagentqueue.cron
@@ -19,12 +19,12 @@ MYCNF=/tmp/.my.cnf.$$
# Basic error control
if [ ! -r "$SERVERCONF" ]; then
- echo "$PROG: Cannot access to configuration file." >&2
- exit 2
+ echo "$PROG: Cannot access to configuration file." >&2
+ exit 2
fi
if ! touch "$LOGFILE"; then
- echo "$PROG: Cannot write to the log file." >&2
- exit 2
+ echo "$PROG: Cannot write to log file." >&2
+ exit 2
fi
# Fetching database access data.
@@ -42,53 +42,59 @@ trap "rm -f $MYCNF" 0 1 2 3 6 9 15
# Reading pending operations.
mysql --defaults-extra-file="$MYCNF" -D "$CATALOG" -Nse "
SELECT ogagent_queue.id, ogagent_queue.exectime, ogagent_queue.operation,
- ordenadores.idordenador, ordenadores.ip, ordenadores.agentkey
+ 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; do
- # Preparing operation data.
- # TODO: preparing messages translation.
- case "$OPER" in
- popup-10) # Message: min. before power off.
- AGNTURL=https://$AGNTIP:8000/opengnsys/popup
- DATA='{"title":"Apagado en 10 min.","message":"Fin del tiempo de acceso remoto.\nEl ordenador se apagará automáticamente dentro de 10 minutos."}'
- ;;
- popup-5) # Message: 5 min. before power off.
- AGNTURL=https://$AGNTIP:8000/opengnsys/popup
- DATA='{"title":"Apagado en 5 min.","message":"El ordenador se apagará automáticamente dentro de 5 minutos.\nATENCIÓN: Este es el último aviso."}'
- ;;
- 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 sended.
- echo "$(date +"%FT%T%z"): $PROG: Operation sended to OGAgent: client=$AGNTIP, oper=$OPER, exectime=\"$DATE $TIME\"" >> $LOGFILE ;;
- *) # Operation error.
- echo "$(date +"%FT%T%z"): $PROG: Operation error: client=$AGNTIP, oper=$OPER, code=$CODE" >> $LOGFILE ;;
- esac
- else # Unknown operation.
- echo "$(date +"%FT%T%z"): $PROG: Unknown operation: client=$AGNTIP, oper=$OPER" >> $LOGFILE
- fi
- # Deleting operation from database.
- SQL="DELETE FROM ogagent_queue WHERE id='$OPERID';"
- [ "$OPER" == "poweroff" ] && SQL="$SQL
+ 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 sended.
+ echo "$(date +"%FT%T%z"): $PROG: Operation sended to OGAgent: client=$AGNTIP, oper=$OPER, exectime=\"$DATE $TIME\"" >> $LOGFILE ;;
+ *) # Operation error.
+ echo "$(date +"%FT%T%z"): $PROG: Operation error: client=$AGNTIP, oper=$OPER, code=$CODE" >> $LOGFILE ;;
+ esac
+ else # Unknown operation.
+ echo "$(date +"%FT%T%z"): $PROG: Unknown operation: client=$AGNTIP, oper=$OPER" >> $LOGFILE
+ fi
+ # Deleting operation from database.
+ SQL="DELETE FROM ogagent_queue WHERE id='$OPERID';"
+ [ "$OPER" == "poweroff" ] && SQL="$SQL
UPDATE remotepc
- SET reserved = NOW() - INTERVAL 1 SECOND, urllogin=NULL, urllogout=NULL
+ 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';"
- mysql --defaults-extra-file="$MYCNF" -D "$CATALOG" -Nse "$SQL"
- done
+ mysql --defaults-extra-file="$MYCNF" -D "$CATALOG" -Nse "$SQL"
+ done