This commit is contained in:
Jaroslav Drzik
2021-12-10 18:05:03 +01:00
5 changed files with 315 additions and 343 deletions

View File

@@ -1,7 +1,7 @@
# RemoteSupport
GLPI Plugin for direct VNC connection inside ticket
GLPI Plugin for direct VNC connection from browser inside computer from server
This Plugin add a simple button inside tickets:
This Plugin add a simple button inside computer:
![immagine](https://user-images.githubusercontent.com/35736369/142444042-0cd5627b-5a5d-4586-8022-083e51d6f06c.png)
@@ -10,35 +10,60 @@ If user is correctly connected to one or more computer it will launch a VNC conn
- Prerequisites
1) VNC Must be installed in the destination PC
2) PC Name must me correct and resolved inside your DNS Server
3) Add a script in your pc and add a node inside regedit
2) Fusion inventory must be installed on server with GLPI
3) Agent must be installed on remote PC
4) Easy noVNC must be installed on server with GLPI
1) write a script (you will find inside resources) like this (let's assume in c:\startVNC.bat)
> SET S=%1
>
> SET S=%S:~7,-2%
>
> call "C:\Program Files\TightVNC\tvnviewer.exe" %S%
>
> quit 0
clone it and build binnary with make, edit Makefile in remotesupport plugin and build with make
2) Open regedit and add
Windows Registry Editor Version 5.00
Create systemd unit file:
```
[HKEY_CLASSES_ROOT\vnc]
@="URL:vnc Protocol"
"URL Protocol"=""
[Unit]
Description=Easy NoVNC
[HKEY_CLASSES_ROOT\vnc\shell]
[Service]
ExecStart=/usr/local/bin/easy-novnc -a :8888 -H -P
[HKEY_CLASSES_ROOT\vnc\shell\open]
[HKEY_CLASSES_ROOT\vnc\shell\open\command]
@="\"c:\\startVNC.bat\" \"%1\""
[Install]
WantedBy=multi-user.target
```
3) Download and install the plugin as usual
It will listen on 8888 port on local host.
TODO: a lot of documentation
Secure connection to server if you want, some ports are hardcoded in current status of plugin
```
<IfModule mod_ssl.c>
<VirtualHost *:443>
RewriteEngine On
ProxyPreserveHost On
ProxyRequests Off
# allow for upgrading to websockets
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://localhost:8888/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /glpi/(.*) http://localhost/glpi/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) http://localhost:8888/$1 [P,L]
ProxyPass "/" "http://localhost:8888/"
ProxyPassReverse "/" "http://localhost:8888/"
ProxyPass "/glpi/" "http://localhost/glpi/"
ProxyPassReverse "/glpi/" "http://localhost/glpi/"
ProxyPass "/vnc" "ws://localhost:8888/vnc"
ProxyPassReverse "/vnc" "ws://localhost:8888/vnc
ServerName server.name.lan
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
</VirtualHost>
</IfModule>
```

201
hook.php
View File

@@ -1,124 +1,125 @@
<?php
/*
-------------------------------------------------------------------------
Remote Spport (VNC)
Copyright (C) 2021 by Alessandro Carloni
https://github.com/Kaya84/RemoteSupport
-------------------------------------------------------------------------
Remote Spport (VNC)
Copyright (C) 2021 by Alessandro Carloni
https://github.com/Kaya84/RemoteSupport
-------------------------------------------------------------------------
LICENSE
This file is part of Camera Input.
Camera Input is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
Camera Input is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Camera Input. If not, see <http://www.gnu.org/licenses/>.
--------------------------------------------------------------------------
*/
-------------------------------------------------------------------------
LICENSE
This file is part of Camera Input.
Camera Input is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
Camera Input is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Camera Input. If not, see <http://www.gnu.org/licenses/>.
--------------------------------------------------------------------------
*/
function plugin_remotesupport_install()
{
global $DB;
global $DB;
Toolbox::logInFile("remotsupport","Installing plugin");
$state_online = [
'name' => 'Online',
'entities_id' => 0,
'is_recursive' => 0,
'comment' => '',
'states_id' => 0,
'completename' => 'Online',
'level' => 1,
'ancestors_cache' => '[]',
'sons_cache' => 'NULL',
'is_visible_computer' => 1,
'is_visible_monitor' => 0,
'is_visible_networkequipment' => 0,
'is_visible_peripheral' => 0,
'is_visible_phone' => 0,
'is_visible_printer' => 0,
'is_visible_softwareversion' => 0,
'is_visible_softwarelicense' => 0,
'is_visible_line' => 0,
'is_visible_certificate' => 0,
'is_visible_rack' => 0,
'is_visible_passivedcequipment' => 0,
'is_visible_enclosure' => 0,
'is_visible_pdu' => 0,
'is_visible_cluster' => 0,
'is_visible_contract' => 0,
'is_visible_appliance' => 0];
Toolbox::logInFile("remotsupport", "Installing plugin");
$state_online = [
'name' => 'Online',
'entities_id' => 0,
'is_recursive' => 0,
'comment' => '',
'states_id' => 0,
'completename' => 'Online',
'level' => 1,
'ancestors_cache' => '[]',
'sons_cache' => 'NULL',
'is_visible_computer' => 1,
'is_visible_monitor' => 0,
'is_visible_networkequipment' => 0,
'is_visible_peripheral' => 0,
'is_visible_phone' => 0,
'is_visible_printer' => 0,
'is_visible_softwareversion' => 0,
'is_visible_softwarelicense' => 0,
'is_visible_line' => 0,
'is_visible_certificate' => 0,
'is_visible_rack' => 0,
'is_visible_passivedcequipment' => 0,
'is_visible_enclosure' => 0,
'is_visible_pdu' => 0,
'is_visible_cluster' => 0,
'is_visible_contract' => 0,
'is_visible_appliance' => 0];
$ret = $DB->insert(
'glpi_states', $state_online
);
$ret = $DB->insert(
'glpi_states', $state_online
);
$state_offline = $state_online;
$state_offline["name"] = 'Offline';
$state_offline["completename"] = 'Offline';
$state_offline = $state_online;
$state_offline["name"] = 'Offline';
$state_offline["completename"] = 'Offline';
$ret = $DB->insert(
'glpi_states', $state_offline
);
$ret = $DB->insert(
'glpi_states', $state_offline
);
return true;
return true;
}
function plugin_remotesupport_uninstall(){
global $DB;
function plugin_remotesupport_uninstall()
{
global $DB;
Toolbox::logInFile("remotsupport","Uninstalling plugin");
CronTask::Unregister('remotesupport');
Toolbox::logInFile("remotsupport", "Uninstalling plugin");
CronTask::Unregister('remotesupport');
$req = $DB->request('glpi_states', ['FIELDS' => ['glpi_states' => ['id', 'name']]], [ 'OR' => [ 'name' => 'Online', 'name' => 'Offline']]);
$req = $DB->request('glpi_states', ['FIELDS' => ['glpi_states' => ['id', 'name']]], ['OR' => ['name' => 'Online', 'name' => 'Offline']]);
$ret = $req->next();
$states_ids[$ret['name']] = $ret['id'];
$ret = $req->next();
$states_ids[$ret['name']] = $ret['id'];
$ret = $req->next();
$states_ids[$ret['name']] = $ret['id'];
$ret = $req->next();
$states_ids[$ret['name']] = $ret['id'];
$DB->query('UPDATE glpi_computers SET states_id=NULL WHERE id='.$states_ids["Offline"]);
$DB->query('UPDATE glpi_computers SET states_id=NULL WHERE id='.$states_ids["Online"]);
$DB->query('DELETE FROM glpi_states WHERE id='.$states_ids["Offline"]);
$DB->query('DELETE FROM glpi_states WHERE id='.$states_ids["Online"]);
$DB->query('UPDATE glpi_computers SET states_id=NULL WHERE id=' . $states_ids["Offline"]);
$DB->query('UPDATE glpi_computers SET states_id=NULL WHERE id=' . $states_ids["Online"]);
$DB->query('DELETE FROM glpi_states WHERE id=' . $states_ids["Offline"]);
$DB->query('DELETE FROM glpi_states WHERE id=' . $states_ids["Online"]);
return true;
return true;
}
function plugin_remotesupport_postinit() {
global $CFG_GLPI, $DB;
function plugin_remotesupport_postinit()
{
global $CFG_GLPI, $DB;
if(isset($_GET['id']) && $_GET['id'] != 0 && isset($_GET['_itemtype']) && $_GET['_itemtype'] == "Ticket"){
$id = $_GET['id'];
//mysql> select * from glpi_tickets_users where tickets_id = 2 and type = 1;
$req = $DB->request(['FROM' => 'glpi_tickets_users', 'WHERE' => ['tickets_id' => $id, 'type' => 1]]);
//NB: Estraggo unicamente il primo richiedente
$row = $req->next();
$requester = $row['users_id'];
// select id, name, users_id from glpi_computers where users_id = 178;
if ($row['users_id'] != 0) {
$req2 = $DB->request(['FROM' => 'glpi_computers', 'WHERE' => ['users_id' => $requester, 'is_deleted' => 0]]);
$url = "";
if (isset($_GET['id']) && $_GET['id'] != 0 && isset($_GET['_itemtype']) && $_GET['_itemtype'] == "Ticket") {
$id = $_GET['id'];
while ($row2 = $req2->next()){
//$url .= "<li class=\"document\" onclick=\"location.href='vnc://" . $row2['name'] ."'\"$
$url .= "<li class=\"document\" onclick=\"location.href='vnc://" . $row2['name'] ."'\"><i class=\"fa fa-laptop-medical\"></i>" . $row2['name'] . "</li>";
}
//mysql> select * from glpi_tickets_users where tickets_id = 2 and type = 1;
if ($url != ""){
echo "<div><ul class=\"timeline_choices\"><h2>Remote support : </h2>";
echo $url;
echo "</ul></div>";
}
}
}
$req = $DB->request(['FROM' => 'glpi_tickets_users', 'WHERE' => ['tickets_id' => $id, 'type' => 1]]);
//NB: Estraggo unicamente il primo richiedente
$row = $req->next();
$requester = $row['users_id'];
// select id, name, users_id from glpi_computers where users_id = 178;
if ($row['users_id'] != 0) {
$req2 = $DB->request(['FROM' => 'glpi_computers', 'WHERE' => ['users_id' => $requester, 'is_deleted' => 0]]);
$url = "";
while ($row2 = $req2->next()) {
//$url .= "<li class=\"document\" onclick=\"location.href='vnc://" . $row2['name'] ."'\"$
$url .= "<li class=\"document\" onclick=\"location.href='vnc://" . $row2['name'] . "'\"><i class=\"fa fa-laptop-medical\"></i>" . $row2['name'] . "</li>";
}
if ($url != "") {
echo "<div><ul class=\"timeline_choices\"><h2>Remote support : </h2>";
echo $url;
echo "</ul></div>";
}
}
}
}
?>

View File

@@ -1,81 +1,39 @@
<?php
/*
------------------------------------------------------------------------
FusionInventory
Copyright (C) 2010-2011 by the FusionInventory Development Team.
include "../../../inc/includes.php";
http://www.fusioninventory.org/ http://forge.fusioninventory.org/
------------------------------------------------------------------------
declare (ticks = 1);
LICENSE
global $DB, $agents;
This file is part of FusionInventory project.
$check_arr = [];
$comps = [];
$pfInventoryComputerComputer = new PluginFusioninventoryInventoryComputerComputer();
foreach (getAllDataFromTable(PluginFusioninventoryAgent::getTable()) as $a) {
FusionInventory is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
$check = [];
$a_computerextend = $pfInventoryComputerComputer->hasAutomaticInventory($a["computers_id"]);
FusionInventory is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with FusionInventory. If not, see <http://www.gnu.org/licenses/>.
------------------------------------------------------------------------
@package FusionInventory
@author Walid Nouh
@co-author
@copyright Copyright (c) 2010-2011 FusionInventory team
@license AGPL License 3.0 or (at your option) any later version
http://www.gnu.org/licenses/agpl-3.0-standalone.html
@link http://www.fusioninventory.org/
@link http://forge.fusioninventory.org/projects/fusioninventory-for-glpi/
@since 2010
------------------------------------------------------------------------
*/
include ("../../../inc/includes.php");
declare(ticks=1);
global $DB,$agents;
$check_arr = [];
$comps = [];
$pfInventoryComputerComputer = new PluginFusioninventoryInventoryComputerComputer();
foreach (getAllDataFromTable(PluginFusioninventoryAgent::getTable()) as $a) {
$check = [];
$a_computerextend = $pfInventoryComputerComputer->hasAutomaticInventory($a["computers_id"]);
$check["url"] = "http://".$a_computerextend["remote_addr"].":62354/status";
$check["id"] = $a["id"];
$check["computers_id"] = $a["computers_id"];
$check["status"] = "unknown";
$check_arr[] = $check;
$comps[$a["computers_id"]] = $check;
//print_r($agent->getAgentStatusURLs());
}
$check["url"] = "http://" . $a_computerextend["remote_addr"] . ":62354/status";
$check["id"] = $a["id"];
$check["computers_id"] = $a["computers_id"];
$check["status"] = "unknown";
$check_arr[] = $check;
$comps[$a["computers_id"]] = $check;
//print_r($agent->getAgentStatusURLs());
}
$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("file", "/tmp/error-output.txt", "a") // stderr is a file to write to
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("file", "/tmp/error-output.txt", "a"), // stderr is a file to write to
);
$cwd = '/tmp';
$env = array('debug' => 'false');
$process = proc_open(__DIR__.'/check_status', $descriptorspec, $pipes, $cwd, $env);
$process = proc_open(__DIR__ . '/check_status', $descriptorspec, $pipes, $cwd, $env);
if (is_resource($process)) {
// $pipes now looks like this:
@@ -96,7 +54,7 @@ if (is_resource($process)) {
echo "command returned $return_value\n";
}
$req = $DB->request('glpi_states', ['FIELDS' => ['glpi_states' => ['id', 'name']]], [ 'OR' => [ 'name' => 'Online', 'name' => 'Offline']]);
$req = $DB->request('glpi_states', ['FIELDS' => ['glpi_states' => ['id', 'name']]], ['OR' => ['name' => 'Online', 'name' => 'Offline']]);
$ret = $req->next();
$states_ids[$ret['name']] = $ret['id'];
@@ -104,13 +62,11 @@ $ret = $req->next();
$states_ids[$ret['name']] = $ret['id'];
print_r($states_ids);
$DB->update("glpi_computers", [
'states_id' => $states_ids["Offline"] ] ,
[ '1' => '1' ]
);
$DB->update("glpi_computers", [
'states_id' => $states_ids["Offline"] ] ,
[ '1' => '1' ]
);
$ids = [];
foreach ($checked as $s) {
echo $s->computers_id."\n";
@@ -122,6 +78,5 @@ $DB->update("glpi_computers", [
[ 'id' => $ids ]
);
// print_r($a_computerextend);
// print_r($a_computerextend);
exit(0);

View File

@@ -1,140 +1,141 @@
<?php
if (!defined('GLPI_ROOT')) {
die("Sorry. You can't access directly to this file");
die("Sorry. You can't access directly to this file");
}
class PluginRemotesupportRemotesupport extends CommonDBTM
{
public static function showInfo($item)
{
$fi_path = Plugin::getWebDir('fusioninventory');
class PluginRemotesupportRemotesupport extends CommonDBTM {
static function showInfo($item) {
// Manage locks pictures
PluginFusioninventoryLock::showLockIcon('Computer');
$fi_path = Plugin::getWebDir('fusioninventory');
$pfInventoryComputerComputer = new PluginFusioninventoryInventoryComputerComputer();
$a_computerextend = $pfInventoryComputerComputer->hasAutomaticInventory($item->getID());
if (empty($a_computerextend)) {
return true;
}
// Manage locks pictures
PluginFusioninventoryLock::showLockIcon('Computer');
echo '<table class="tab_glpi" width="100%">';
echo '<tr>';
echo '<th>' . __('Remote Support') . '</th>';
echo '</tr>';
echo '<tr class="tab_bg_1">';
echo '<td>';
$pfInventoryComputerComputer = new PluginFusioninventoryInventoryComputerComputer();
$a_computerextend = $pfInventoryComputerComputer->hasAutomaticInventory($item->getID());
if (empty($a_computerextend)) {
return true;
}
$url = "<a target=\"_blank\" href=\"https://" . $_SERVER['SERVER_ADDR'] . "/vnc.html?path=vnc%2F" . $a_computerextend['remote_addr'] . "&autoconnect=true&resize=scale&reconnect=true&show_dot=true\"><li class=\"document\"><i class=\"fa fa-laptop-medical\"></i>" . $a_computerextend['remote_addr'] . "</li></a>";
echo '<table class="tab_glpi" width="100%">';
echo '<tr>';
echo '<th>'.__('Remote Support').'</th>';
echo '</tr>';
echo '<tr class="tab_bg_1">';
echo '<td>';
$url = "<a target=\"_blank\" href=\"https://" . $_SERVER['SERVER_ADDR']. "/vnc.html?path=vnc%2F". $a_computerextend['remote_addr'] ."&autoconnect=true&resize=scale&reconnect=true&show_dot=true\"><li class=\"document\"><i class=\"fa fa-laptop-medical\"></i>" . $a_computerextend['remote_addr'] . "</li></a>";
if ($url != ""){
if ($url != "") {
echo "<div><ul class=\"timeline_choices\"><h2>VNC connect : </h2>";
echo $url;
echo "</ul></div>";
}
echo '</td>';
echo '</tr>';
echo '</table>';
}
echo '</td>';
echo '</tr>';
echo '</table>';
}
}
static function getStatesIds() {
global $DB;
public static function getStatesIds()
{
global $DB;
$states_ids = [];
$states_ids = [];
$req = $DB->request('glpi_states', ['FIELDS' => ['glpi_states' => ['id', 'name']]], [ 'OR' => [ 'name' => 'Online', 'name' => 'Offline']]);
$req = $DB->request('glpi_states', ['FIELDS' => ['glpi_states' => ['id', 'name']]], ['OR' => ['name' => 'Online', 'name' => 'Offline']]);
$ret = $req->next();
$states_ids[$ret['name']] = $ret['id'];
$ret = $req->next();
$states_ids[$ret['name']] = $ret['id'];
return $states_ids;
}
$ret = $req->next();
$states_ids[$ret['name']] = $ret['id'];
$ret = $req->next();
$states_ids[$ret['name']] = $ret['id'];
static function cronRemotesupport($task) {
global $DB;
return $states_ids;
}
Toolbox::logInFile("remotsupport","Starting search of agents\n");
public static function cronRemotesupport($task)
{
global $DB;
Toolbox::logInFile("remotsupport", "Starting search of agents\n");
$check_arr = [];
$comps = [];
$pfInventoryComputerComputer = new PluginFusioninventoryInventoryComputerComputer();
foreach (getAllDataFromTable(PluginFusioninventoryAgent::getTable()) as $a) {
$check = [];
$a_computerextend = $pfInventoryComputerComputer->hasAutomaticInventory($a["computers_id"]);
$check = [];
$a_computerextend = $pfInventoryComputerComputer->hasAutomaticInventory($a["computers_id"]);
$check["url"] = "http://".$a_computerextend["remote_addr"].":62354/status";
$check["id"] = $a["id"];
$check["computers_id"] = $a["computers_id"];
$check["status"] = "unknown";
$check["url"] = "http://" . $a_computerextend["remote_addr"] . ":62354/status";
$check["id"] = $a["id"];
$check["computers_id"] = $a["computers_id"];
$check["status"] = "unknown";
$check_arr[] = $check;
$comps[$a["computers_id"]] = $check;
//print_r($agent->getAgentStatusURLs());
}
$check_arr[] = $check;
$comps[$a["computers_id"]] = $check;
//print_r($agent->getAgentStatusURLs());
}
$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("file", "/tmp/error-output.txt", "a") // stderr is a file to write to
);
$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("file", "/tmp/error-output.txt", "a"), // stderr is a file to write to
);
$cwd = '/tmp';
$env = array('debug' => 'false');
$cwd = '/tmp';
$env = array('debug' => 'false');
$process = proc_open(__DIR__.'/../bin/check_status', $descriptorspec, $pipes, $cwd, $env);
$process = proc_open(__DIR__ . '/../bin/check_status', $descriptorspec, $pipes, $cwd, $env);
if (is_resource($process)) {
// $pipes now looks like this:
// 0 => writeable handle connected to child stdin
// 1 => readable handle connected to child stdout
// Any error output will be appended to /tmp/error-output.txt
if (is_resource($process)) {
// $pipes now looks like this:
// 0 => writeable handle connected to child stdin
// 1 => readable handle connected to child stdout
// Any error output will be appended to /tmp/error-output.txt
fwrite($pipes[0], json_encode($check_arr));
fclose($pipes[0]);
fwrite($pipes[0], json_encode($check_arr));
fclose($pipes[0]);
$checked = json_decode(stream_get_contents($pipes[1]));
fclose($pipes[1]);
$checked = json_decode(stream_get_contents($pipes[1]));
fclose($pipes[1]);
// It is important that you close any pipes before calling
// proc_close in order to avoid a deadlock
$return_value = proc_close($process);
// It is important that you close any pipes before calling
// proc_close in order to avoid a deadlock
$return_value = proc_close($process);
Toolbox::logInFile("remotsupport","command returned $return_value\n");
}
Toolbox::logInFile("remotsupport", "command returned $return_value\n");
}
$stids = self::getStatesIds();
$stids = self::getStatesIds();
$DB->update("glpi_computers", [
'states_id' => $stids["Offline"] ] ,
[ '1' => '1' ]
);
$DB->update("glpi_computers", [
'states_id' => $stids["Offline"]],
['1' => '1']
);
foreach ($checked as $s) {
foreach ($checked as $s) {
$comp = new Computer();
$comp->getFromDB($s->computers_id);
$comp->fields["states_id"] = $stids["Online"];
$DB->update("glpi_computers", [
'states_id' => $comp->fields["states_id"]],
['id' => $s->computers_id]
);
Toolbox::logInFile("remotsupport", $s->computers_id . " " . $comp->fields["contact"] . "\n");
$comp = new Computer();
$comp->getFromDB($s->computers_id);
$comp->fields["states_id"] = $stids["Online"];
$DB->update("glpi_computers", [
'states_id' => $comp->fields["states_id"] ],
[ 'id' => $s->computers_id ]
);
Toolbox::logInFile("remotsupport",$s->computers_id." ".$comp->fields["contact"]."\n");
}
}
return 0;
}
return 0;
}
static function cronInfo($name) {
return [
public static function cronInfo($name)
{
return [
'description' => "Agent search remotesupport"];
}
}
}

View File

@@ -1,25 +1,25 @@
<?php
/*
-------------------------------------------------------------------------
Remote Spport (VNC)
Copyright (C) 2021 by Alessandro Carloni
https://github.com/Kaya84/RemoteSupport
-------------------------------------------------------------------------
Remote Spport (VNC)
Copyright (C) 2021 by Alessandro Carloni
https://github.com/Kaya84/RemoteSupport
-------------------------------------------------------------------------
LICENSE
This file is part of Camera Input.
Camera Input is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
Camera Input is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Camera Input. If not, see <http://www.gnu.org/licenses/>.
--------------------------------------------------------------------------
*/
-------------------------------------------------------------------------
LICENSE
This file is part of Camera Input.
Camera Input is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
Camera Input is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Camera Input. If not, see <http://www.gnu.org/licenses/>.
--------------------------------------------------------------------------
*/
define('PLUGIN_REMOTESUPPORT_VERSION', '0.0.1');
define('PLUGIN_REMOTESUPPORT_MIN_GLPI', '9.5.0');
@@ -28,48 +28,38 @@ define("PLUGIN_REMOTESUPPORT_DIR", GLPI_ROOT . "/plugins/remotesupport");
function plugin_init_remotesupport()
{
global $PLUGIN_HOOKS;
$PLUGIN_HOOKS['csrf_compliant']['remotesupport'] = true;
global $PLUGIN_HOOKS;
$PLUGIN_HOOKS['csrf_compliant']['remotesupport'] = true;
if (Plugin::isPluginActive('remotesupport')) {
// $PLUGIN_HOOKS['add_javascript']['remotesupport'][] = 'js/support.js';
if (Plugin::isPluginActive('remotesupport')) {
$PLUGIN_HOOKS['autoinventory_information']['remotesupport'] = array(
'Computer' => array('PluginRemotesupportRemotesupport', 'showInfo')
);
$PLUGIN_HOOKS['autoinventory_information']['remotesupport'] = array(
'Computer' => array('PluginRemotesupportRemotesupport', 'showInfo'),
);
CronTask::Register('PluginRemotesupportRemotesupport', 'remotesupport', 300,
['mode'=>2, 'allowmode'=>3, 'logs_lifetime'=>30,
'comment'=> 'Remotesupport crontab search agents']);
CronTask::Register('PluginRemotesupportRemotesupport', 'remotesupport', 300,
['mode' => 2, 'allowmode' => 3, 'logs_lifetime' => 30,
'comment' => 'Remotesupport crontab search agents']);
$PLUGIN_HOOKS['menu']['remotesupport'] = true;
$PLUGIN_HOOKS['post_init']['remotesupport'] = 'plugin_remotesupport_postinit';
// Add Config Page
// Plugin::registerClass('PluginRemotesupportConfig', ['addtabon' => 'Config']);
// $PLUGIN_HOOKS["menu_toadd"]['remotesupport'] = ['tools' => 'PluginRemotesupportMenu'];
// $PLUGIN_HOOKS['config_page']['remotesupport'] = 'front/index.php';
$PLUGIN_HOOKS['menu']['remotesupport'] = true;
$PLUGIN_HOOKS['post_init']['remotesupport'] = 'plugin_remotesupport_postinit';
}
}
}
function plugin_version_remotesupport()
{
return [
'name' => __('Remote Support Input', 'remotesupport'),
'version' => PLUGIN_REMOTESUPPORT_VERSION,
'author' => 'Alessandro Carloni',
'license' => 'GPLv2',
'homepage' =>'https://github.com/Kaya84/',
'requirements' => [
'glpi' => [
'min' => PLUGIN_REMOTESUPPORT_MIN_GLPI,
'max' => PLUGIN_REMOTESUPPORT_MAX_GLPI
]
]
];
return [
'name' => __('Remote Support Input', 'remotesupport'),
'version' => PLUGIN_REMOTESUPPORT_VERSION,
'author' => 'Alessandro Carloni',
'license' => 'GPLv2',
'homepage' => 'https://github.com/Kaya84/',
'requirements' => [
'glpi' => [
'min' => PLUGIN_REMOTESUPPORT_MIN_GLPI,
'max' => PLUGIN_REMOTESUPPORT_MAX_GLPI,
],
],
];
}