diff --git a/extras/bin/gotty b/extras/bin/gotty new file mode 100755 index 0000000000..1a1de33cf6 Binary files /dev/null and b/extras/bin/gotty differ diff --git a/pandora_agents/pc/AIX/pandora_agent.conf b/pandora_agents/pc/AIX/pandora_agent.conf index 4fff860931..f3657d3a7a 100644 --- a/pandora_agents/pc/AIX/pandora_agent.conf +++ b/pandora_agents/pc/AIX/pandora_agent.conf @@ -1,5 +1,5 @@ # Base config file for Pandora FMS agents -# Version 7.0NG.739, AIX version +# Version 7.0NG.740, AIX version # Licensed under GPL license v2, # Copyright (c) 2003-2010 Artica Soluciones Tecnologicas # http://www.pandorafms.com diff --git a/pandora_agents/pc/FreeBSD/pandora_agent.conf b/pandora_agents/pc/FreeBSD/pandora_agent.conf index f33b304a7c..95fd1090ad 100644 --- a/pandora_agents/pc/FreeBSD/pandora_agent.conf +++ b/pandora_agents/pc/FreeBSD/pandora_agent.conf @@ -1,5 +1,5 @@ # Base config file for Pandora FMS agents -# Version 7.0NG.739, FreeBSD Version +# Version 7.0NG.740, FreeBSD Version # Licensed under GPL license v2, # Copyright (c) 2003-2010 Artica Soluciones Tecnologicas # http://www.pandorafms.com diff --git a/pandora_agents/pc/HP-UX/pandora_agent.conf b/pandora_agents/pc/HP-UX/pandora_agent.conf index 1d627fc222..04122feb30 100644 --- a/pandora_agents/pc/HP-UX/pandora_agent.conf +++ b/pandora_agents/pc/HP-UX/pandora_agent.conf @@ -1,5 +1,5 @@ # Base config file for Pandora FMS agents -# Version 7.0NG.739, HP-UX Version +# Version 7.0NG.740, HP-UX Version # Licensed under GPL license v2, # Copyright (c) 2003-2009 Artica Soluciones Tecnologicas # http://www.pandorafms.com diff --git a/pandora_agents/pc/Linux/pandora_agent.conf b/pandora_agents/pc/Linux/pandora_agent.conf index 9501fa5222..b083e7f3aa 100644 --- a/pandora_agents/pc/Linux/pandora_agent.conf +++ b/pandora_agents/pc/Linux/pandora_agent.conf @@ -1,5 +1,5 @@ # Base config file for Pandora FMS agents -# Version 7.0NG.739, GNU/Linux +# Version 7.0NG.740, GNU/Linux # Licensed under GPL license v2, # Copyright (c) 2003-2009 Artica Soluciones Tecnologicas # http://www.pandorafms.com diff --git a/pandora_agents/pc/NT4/pandora_agent.conf b/pandora_agents/pc/NT4/pandora_agent.conf index bdd4bcf425..4bb88c5b4e 100644 --- a/pandora_agents/pc/NT4/pandora_agent.conf +++ b/pandora_agents/pc/NT4/pandora_agent.conf @@ -1,5 +1,5 @@ # Base config file for Pandora FMS agents -# Version 7.0NG.739, GNU/Linux +# Version 7.0NG.740, GNU/Linux # Licensed under GPL license v2, # Copyright (c) 2003-2009 Artica Soluciones Tecnologicas # http://www.pandorafms.com diff --git a/pandora_agents/pc/SunOS/pandora_agent.conf b/pandora_agents/pc/SunOS/pandora_agent.conf index f80f403dd8..a90b7227ca 100644 --- a/pandora_agents/pc/SunOS/pandora_agent.conf +++ b/pandora_agents/pc/SunOS/pandora_agent.conf @@ -1,5 +1,5 @@ # Base config file for Pandora FMS agents -# Version 7.0NG.739, Solaris Version +# Version 7.0NG.740, Solaris Version # Licensed under GPL license v2, # Copyright (c) 2003-2009 Artica Soluciones Tecnologicas # http://www.pandorafms.com diff --git a/pandora_agents/pc/Win32/pandora_agent.conf b/pandora_agents/pc/Win32/pandora_agent.conf index 86bfede9d7..d750898b70 100644 --- a/pandora_agents/pc/Win32/pandora_agent.conf +++ b/pandora_agents/pc/Win32/pandora_agent.conf @@ -1,6 +1,6 @@ # Base config file for Pandora FMS Windows Agent # (c) 2006-2010 Artica Soluciones Tecnologicas -# Version 7.0NG.739 +# Version 7.0NG.740 # This program is Free Software, you can redistribute it and/or modify it # under the terms of the GNU General Public Licence as published by the Free Software diff --git a/pandora_agents/shellscript/aix/pandora_agent.conf b/pandora_agents/shellscript/aix/pandora_agent.conf index aa65eb24d9..6a663d6331 100644 --- a/pandora_agents/shellscript/aix/pandora_agent.conf +++ b/pandora_agents/shellscript/aix/pandora_agent.conf @@ -1,6 +1,6 @@ # Fichero de configuracion base de agentes de Pandora # Base config file for Pandora agents -# Version 7.0NG.739, AIX version +# Version 7.0NG.740, AIX version # General Parameters # ================== diff --git a/pandora_agents/shellscript/bsd-ipso/pandora_agent.conf b/pandora_agents/shellscript/bsd-ipso/pandora_agent.conf index 7c225fea1c..99e4c62462 100644 --- a/pandora_agents/shellscript/bsd-ipso/pandora_agent.conf +++ b/pandora_agents/shellscript/bsd-ipso/pandora_agent.conf @@ -1,6 +1,6 @@ # Fichero de configuracion base de agentes de Pandora # Base config file for Pandora agents -# Version 7.0NG.739 +# Version 7.0NG.740 # FreeBSD/IPSO version # Licenced under GPL licence, 2003-2007 Sancho Lerena diff --git a/pandora_agents/shellscript/hp-ux/pandora_agent.conf b/pandora_agents/shellscript/hp-ux/pandora_agent.conf index 06bd17ed45..7a9d2c4347 100644 --- a/pandora_agents/shellscript/hp-ux/pandora_agent.conf +++ b/pandora_agents/shellscript/hp-ux/pandora_agent.conf @@ -1,6 +1,6 @@ # Fichero de configuracion base de agentes de Pandora # Base config file for Pandora agents -# Version 7.0NG.739, HPUX Version +# Version 7.0NG.740, HPUX Version # General Parameters # ================== diff --git a/pandora_agents/shellscript/linux/pandora_agent.conf b/pandora_agents/shellscript/linux/pandora_agent.conf index 54b0e06dbf..a55d96a952 100644 --- a/pandora_agents/shellscript/linux/pandora_agent.conf +++ b/pandora_agents/shellscript/linux/pandora_agent.conf @@ -1,5 +1,5 @@ # Base config file for Pandora FMS agents -# Version 7.0NG.739 +# Version 7.0NG.740 # Licensed under GPL license v2, # (c) 2003-2010 Artica Soluciones Tecnologicas # please visit http://pandora.sourceforge.net diff --git a/pandora_agents/shellscript/mac_osx/pandora_agent.conf b/pandora_agents/shellscript/mac_osx/pandora_agent.conf index f5205f4d16..a24a24d16e 100644 --- a/pandora_agents/shellscript/mac_osx/pandora_agent.conf +++ b/pandora_agents/shellscript/mac_osx/pandora_agent.conf @@ -1,5 +1,5 @@ # Base config file for Pandora FMS agents -# Version 7.0NG.739 +# Version 7.0NG.740 # Licensed under GPL license v2, # (c) 2003-2009 Artica Soluciones Tecnologicas # please visit http://pandora.sourceforge.net diff --git a/pandora_agents/shellscript/openWRT/pandora_agent.conf b/pandora_agents/shellscript/openWRT/pandora_agent.conf index 7d6a12d62b..74d515cb4e 100644 --- a/pandora_agents/shellscript/openWRT/pandora_agent.conf +++ b/pandora_agents/shellscript/openWRT/pandora_agent.conf @@ -1,5 +1,5 @@ # Base config file for Pandora FMS agents -# Version 7.0NG.739 +# Version 7.0NG.740 # Licensed under GPL license v2, # please visit http://pandora.sourceforge.net diff --git a/pandora_agents/shellscript/solaris/pandora_agent.conf b/pandora_agents/shellscript/solaris/pandora_agent.conf index cbae89b0b5..dc915ef18e 100644 --- a/pandora_agents/shellscript/solaris/pandora_agent.conf +++ b/pandora_agents/shellscript/solaris/pandora_agent.conf @@ -1,6 +1,6 @@ # Fichero de configuracion base de agentes de Pandora # Base config file for Pandora agents -# Version 7.0NG.739, Solaris version +# Version 7.0NG.740, Solaris version # General Parameters # ================== diff --git a/pandora_agents/unix/AIX/pandora_agent.conf b/pandora_agents/unix/AIX/pandora_agent.conf index 7f2791b05f..de7e97911b 100644 --- a/pandora_agents/unix/AIX/pandora_agent.conf +++ b/pandora_agents/unix/AIX/pandora_agent.conf @@ -1,5 +1,5 @@ # Base config file for Pandora FMS agents -# Version 7.0NG.739, AIX version +# Version 7.0NG.740, AIX version # Licensed under GPL license v2, # Copyright (c) 2003-2010 Artica Soluciones Tecnologicas # http://www.pandorafms.com diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 9c47b6ec9a..6a65e22674 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.739-191028 +Version: 7.0NG.740-191118 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index ace99c417d..a29952b257 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.739-191028" +pandora_version="7.0NG.740-191118" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/Darwin/pandora_agent.conf b/pandora_agents/unix/Darwin/pandora_agent.conf index 7f403ae687..34dd1bf4fc 100644 --- a/pandora_agents/unix/Darwin/pandora_agent.conf +++ b/pandora_agents/unix/Darwin/pandora_agent.conf @@ -1,5 +1,5 @@ # Base config file for Pandora FMS agents -# Version 7.0NG.739, GNU/Linux +# Version 7.0NG.740, GNU/Linux # Licensed under GPL license v2, # Copyright (c) 2003-2012 Artica Soluciones Tecnologicas # http://www.pandorafms.com diff --git a/pandora_agents/unix/FreeBSD/pandora_agent.conf b/pandora_agents/unix/FreeBSD/pandora_agent.conf index 2871669f88..e4ad74ffe7 100644 --- a/pandora_agents/unix/FreeBSD/pandora_agent.conf +++ b/pandora_agents/unix/FreeBSD/pandora_agent.conf @@ -1,5 +1,5 @@ # Base config file for Pandora FMS agents -# Version 7.0NG.739, FreeBSD Version +# Version 7.0NG.740, FreeBSD Version # Licensed under GPL license v2, # Copyright (c) 2003-2016 Artica Soluciones Tecnologicas # http://www.pandorafms.com diff --git a/pandora_agents/unix/HP-UX/pandora_agent.conf b/pandora_agents/unix/HP-UX/pandora_agent.conf index 1fcbc17977..e55445fe13 100644 --- a/pandora_agents/unix/HP-UX/pandora_agent.conf +++ b/pandora_agents/unix/HP-UX/pandora_agent.conf @@ -1,5 +1,5 @@ # Base config file for Pandora FMS agents -# Version 7.0NG.739, HP-UX Version +# Version 7.0NG.740, HP-UX Version # Licensed under GPL license v2, # Copyright (c) 2003-2009 Artica Soluciones Tecnologicas # http://www.pandorafms.com diff --git a/pandora_agents/unix/Linux/pandora_agent.conf b/pandora_agents/unix/Linux/pandora_agent.conf index 938565241d..54ace6a811 100644 --- a/pandora_agents/unix/Linux/pandora_agent.conf +++ b/pandora_agents/unix/Linux/pandora_agent.conf @@ -1,5 +1,5 @@ # Base config file for Pandora FMS agents -# Version 7.0NG.739, GNU/Linux +# Version 7.0NG.740, GNU/Linux # Licensed under GPL license v2, # Copyright (c) 2003-2014 Artica Soluciones Tecnologicas # http://www.pandorafms.com diff --git a/pandora_agents/unix/NT4/pandora_agent.conf b/pandora_agents/unix/NT4/pandora_agent.conf index f9a2b10b93..94e32e8056 100644 --- a/pandora_agents/unix/NT4/pandora_agent.conf +++ b/pandora_agents/unix/NT4/pandora_agent.conf @@ -1,5 +1,5 @@ # Base config file for Pandora FMS agents -# Version 7.0NG.739, GNU/Linux +# Version 7.0NG.740, GNU/Linux # Licensed under GPL license v2, # Copyright (c) 2003-2009 Artica Soluciones Tecnologicas # http://www.pandorafms.com diff --git a/pandora_agents/unix/NetBSD/pandora_agent.conf b/pandora_agents/unix/NetBSD/pandora_agent.conf index 2f108c2011..71e7d14192 100644 --- a/pandora_agents/unix/NetBSD/pandora_agent.conf +++ b/pandora_agents/unix/NetBSD/pandora_agent.conf @@ -1,5 +1,5 @@ # Base config file for Pandora FMS agents -# Version 7.0NG.739, NetBSD Version +# Version 7.0NG.740, NetBSD Version # Licensed under GPL license v2, # Copyright (c) 2003-2010 Artica Soluciones Tecnologicas # http://www.pandorafms.com diff --git a/pandora_agents/unix/SunOS/pandora_agent.conf b/pandora_agents/unix/SunOS/pandora_agent.conf index 47f17aae0f..cc89dee501 100644 --- a/pandora_agents/unix/SunOS/pandora_agent.conf +++ b/pandora_agents/unix/SunOS/pandora_agent.conf @@ -1,5 +1,5 @@ # Base config file for Pandora FMS agents -# Version 7.0NG.739, Solaris Version +# Version 7.0NG.740, Solaris Version # Licensed under GPL license v2, # Copyright (c) 2003-2009 Artica Soluciones Tecnologicas # http://www.pandorafms.com diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index a011385d9d..b82e31559b 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -41,8 +41,8 @@ my $Sem = undef; # Semaphore used to control the number of threads my $ThreadSem = undef; -use constant AGENT_VERSION => '7.0NG.739'; -use constant AGENT_BUILD => '191028'; +use constant AGENT_VERSION => '7.0NG.740'; +use constant AGENT_BUILD => '191118'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index ded364b98a..92f817efaa 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -2,8 +2,8 @@ #Pandora FMS Linux Agent # %define name pandorafms_agent_unix -%define version 7.0NG.739 -%define release 191028 +%define version 7.0NG.740 +%define release 191118 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index f503af722d..ebd4df71c7 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -2,8 +2,8 @@ #Pandora FMS Linux Agent # %define name pandorafms_agent_unix -%define version 7.0NG.739 -%define release 191028 +%define version 7.0NG.740 +%define release 191118 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index e1ef018c0e..936755316f 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -9,8 +9,8 @@ # Please see http://www.pandorafms.org. This code is licensed under GPL 2.0 license. # ********************************************************************** -PI_VERSION="7.0NG.739" -PI_BUILD="191028" +PI_VERSION="7.0NG.740" +PI_BUILD="191118" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/bin/pandora_agent.conf b/pandora_agents/win32/bin/pandora_agent.conf index d6bf2f9005..79660e5b5d 100644 --- a/pandora_agents/win32/bin/pandora_agent.conf +++ b/pandora_agents/win32/bin/pandora_agent.conf @@ -1,6 +1,6 @@ # Base config file for Pandora FMS Windows Agent # (c) 2006-2017 Artica Soluciones Tecnologicas -# Version 7.0NG.739 +# Version 7.0NG.740 # This program is Free Software, you can redistribute it and/or modify it # under the terms of the GNU General Public Licence as published by the Free Software diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index fd4c5af3e4..04238d3924 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -3,7 +3,7 @@ AllowLanguageSelection {Yes} AppName -{Pandora FMS Windows Agent v7.0NG.739} +{Pandora FMS Windows Agent v7.0NG.740} ApplicationID {17E3D2CF-CA02-406B-8A80-9D31C17BD08F} @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{191028} +{191118} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 2687ff4b4f..157d2ebe66 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.739(Build 191028)") +#define PANDORA_VERSION ("7.0NG.740(Build 191118)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index fe4067fa72..de7973252d 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.739(Build 191028))" + VALUE "ProductVersion", "(7.0NG.740(Build 191118))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index a2bc785644..6a00d319d9 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.739-191028 +Version: 7.0NG.740-191118 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index d995e7f837..aa35237934 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.739-191028" +pandora_version="7.0NG.740-191118" package_pear=0 package_pandora=1 diff --git a/pandora_console/DEBIAN/postinst b/pandora_console/DEBIAN/postinst index eb8e4872f3..a899c6bf0a 100755 --- a/pandora_console/DEBIAN/postinst +++ b/pandora_console/DEBIAN/postinst @@ -11,4 +11,11 @@ echo Restart the apache. /etc/init.d/apache2 restart fi +# Install pandora_websocket_engine service. +cp -pf %{prefix}/pandora_console/pandora_websocket_engine /etc/init.d/ +chmod +x /etc/init.d/pandora_websocket_engine + +echo "You can now start the Pandora FMS Websocket service by executing" +echo " /etc/init.d/pandora_websocket_engine start" + echo "Please, now, point your browser to http://your_IP_address/pandora_console/install.php and follow all the steps described on it." diff --git a/pandora_console/composer.json b/pandora_console/composer.json index 208e2d3d14..4138dc77c2 100644 --- a/pandora_console/composer.json +++ b/pandora_console/composer.json @@ -1,5 +1,5 @@ { - "name": "Pandora FMS", + "name": "pandorafms/console", "description": "Pandora Flexible Monitoring System ", "authors": [ { @@ -14,7 +14,9 @@ "autoload": { "psr-4": { "Models\\": "include/rest-api/models", - "Enterprise\\Models\\": "enterprise/include/rest-api/models" + "Enterprise\\Models\\": "enterprise/include/rest-api/models", + "PandoraFMS\\": "include/lib", + "PandoraFMS\\Enterprise\\": "enterprise/include/lib" } }, "autoload-dev": { diff --git a/pandora_console/extensions/quick_shell.php b/pandora_console/extensions/quick_shell.php new file mode 100644 index 0000000000..13924f56e2 --- /dev/null +++ b/pandora_console/extensions/quick_shell.php @@ -0,0 +1,529 @@ +printForm( + [ + 'form' => [ + 'method' => 'POST', + 'action' => '#', + ], + 'inputs' => [ + [ + 'class' => 'w100p', + 'arguments' => [ + 'name' => 'submit', + 'label' => __('Retry'), + 'type' => 'submit', + 'attributes' => 'class="sub next"', + 'return' => true, + ], + ], + ], + ] + ); + + return; + } + + $wiz->printForm( + [ + 'form' => [ + 'action' => '#', + 'class' => 'wizard', + 'method' => 'post', + ], + 'inputs' => [ + [ + 'label' => __('Username'), + 'arguments' => [ + 'type' => 'text', + 'name' => 'username', + ], + ], + [ + 'label' => __('Port'), + 'arguments' => [ + 'type' => 'text', + 'id' => 'port', + 'name' => 'port', + 'value' => 22, + ], + ], + [ + 'label' => __('Method'), + 'arguments' => [ + 'type' => 'select', + 'name' => 'method', + 'fields' => [ + 'ssh' => __('SSH'), + 'telnet' => __('Telnet'), + ], + 'script' => "p=22; if(this.value == 'telnet') { p=23; } $('#text-port').val(p);", + ], + ], + [ + 'arguments' => [ + 'type' => 'submit', + 'label' => __('Connect'), + 'attributes' => 'class="sub next"', + ], + ], + ], + ], + false, + true + ); + + return; + } + + // Initialize Gotty Client. + $host = $config['gotty_host']; + if ($method == 'ssh') { + // SSH. + $port = $config['gotty_ssh_port']; + $command_arguments = "var args = '?arg=".$username.'@'.$address; + $command_arguments .= '&arg=-p '.$method_port."';"; + } else if ($method == 'telnet') { + // Telnet. + $port = $config['gotty_telnet_port']; + $command_arguments = "var args = '?arg=-l ".$username; + $command_arguments .= '&arg='.$address; + $command_arguments .= '&arg='.$method_port."';"; + } else { + ui_print_error_message(__('Please use SSH or Telnet.')); + return; + } + + // If rediretion is enabled, we will try to connect to http:// or https:// endpoint. + $test = get_headers($ws_url); + if ($test === false) { + if (empty($wiz) === true) { + $wiz = new Wizard(); + } + + ui_print_error_message(__('WebService engine has not been started, please check documentation.')); + echo $wiz->printGoBackButton('#'); + return; + } + + // Check credentials. + $auth_str = ''; + $gotty_url = $host.':'.$port; + if (empty($config['gotty_user']) === false + && empty($config['gotty_pass']) === false + ) { + $auth_str = $config['gotty_user'].':'.$config['gotty_pass']; + $gotty_url = $auth_str.'@'.$host.':'.$port; + } + + $r = file_get_contents('http://'.$gotty_url.'/js/hterm.js'); + if (empty($r) === true) { + if (empty($wiz) === true) { + $wiz = new Wizard(); + } + + ui_print_error_message(__('WebService engine is not working properly, please check documentation.')); + echo $wiz->printGoBackButton('#'); + return; + } + + // Override gotty client settings. + if (empty($auth_str) === true) { + $r .= "var gotty_auth_token = '';"; + } else { + $r .= "var gotty_auth_token = '"; + $r .= $auth_str."';"; + } + + // Set websocket target and method. + $gotty = file_get_contents('http://'.$gotty_url.'/js/gotty.js'); + $url = "var url = (httpsEnabled ? 'wss://' : 'ws://') + window.location.host + window.location.pathname + 'ws';"; + if (empty($config['ws_proxy_url']) === true) { + $new = "var url = (httpsEnabled ? 'wss://' : 'ws://')"; + $new .= " + window.location.host + ':"; + $new .= $config['ws_port'].'/'.$method."';"; + } else { + $new = "var url = '"; + $new .= $config['ws_proxy_url'].'/'.$method."';"; + } + + // Update url. + $gotty = str_replace($url, $new, $gotty); + + // Update websocket arguments. + $args = 'var args = window.location.search;'; + $new = $command_arguments; + + // Update arguments. + $gotty = str_replace($args, $new, $gotty); + + ?> + +
+ + + 0) { + $msg = __('%d Updated', $changes); + if ($critical > 0) { + $msg = __( + '%d Updated, please restart WebSocket engine service', + $changes + ); + } + + ui_print_success_message($msg); + } + + // Form. + $wiz = new Wizard(); + + $wiz->printForm( + [ + 'form' => [ + 'action' => '#', + 'class' => 'wizard', + 'method' => 'post', + ], + 'inputs' => [ + [ + 'label' => __('Gotty path').ui_print_help_tip( + __('Leave blank if using an external Gotty service'), + true + ), + 'arguments' => [ + 'type' => 'text', + 'name' => 'gotty', + 'value' => $config['gotty'], + ], + ], + [ + 'label' => __('Gotty host'), + 'arguments' => [ + 'type' => 'text', + 'name' => 'gotty_host', + 'value' => $config['gotty_host'], + ], + ], + [ + 'label' => __('Gotty ssh port'), + 'arguments' => [ + 'type' => 'text', + 'name' => 'gotty_ssh_port', + 'value' => $config['gotty_ssh_port'], + ], + ], + [ + 'label' => __('Gotty telnet port'), + 'arguments' => [ + 'type' => 'text', + 'name' => 'gotty_telnet_port', + 'value' => $config['gotty_telnet_port'], + ], + ], + [ + 'label' => __('Gotty user').ui_print_help_tip( + __('Optional, set a user to access gotty service'), + true + ), + 'arguments' => [ + 'type' => 'text', + 'name' => 'gotty_user', + 'value' => $config['gotty_user'], + ], + ], + [ + 'label' => __('Gotty password').ui_print_help_tip( + __('Optional, set a password to access gotty service'), + true + ), + 'arguments' => [ + 'type' => 'password', + 'name' => 'gotty_pass', + 'value' => io_output_password($config['gotty_pass']), + ], + ], + [ + 'arguments' => [ + 'type' => 'hidden', + 'name' => 'qs_update', + 'value' => 1, + ], + ], + [ + 'arguments' => [ + 'type' => 'submit', + 'label' => __('Update'), + 'attributes' => 'class="sub next"', + ], + ], + ], + ], + false, + true + ); + +} + + +// This extension is usefull only if the agent has associated IP. +$agent_id = get_parameter('id_agente'); +if (empty($agent_id) === false + && get_parameter('sec2', '') == 'operation/agentes/ver_agente' +) { + $address = agents_get_address($agent_id); + if (empty($address) === false) { + // Extension registration. + extensions_add_opemode_tab_agent( + // TabId. + 'quick_shell', + // TabName. + __('QuickShell'), + // TabIcon. + 'images/ehorus/terminal.png', + // TabFunction. + 'quickShell', + // Version. + 'N/A', + // Acl. + 'PM' + ); + } +} + +extensions_add_godmode_menu_option( + // Name. + __('QuickShell settings'), + // Acl. + 'PM', + // FatherId. + 'gextensions', + // Icon. + 'images/ehorus/terminal.png', + // Version. + 'N/A', + // SubfatherId. + null +); + +extensions_add_godmode_function('quickShellSettings'); diff --git a/pandora_console/extensions/resource_exportation.php b/pandora_console/extensions/resource_exportation.php index ddfa9866ad..14384aaec3 100755 --- a/pandora_console/extensions/resource_exportation.php +++ b/pandora_console/extensions/resource_exportation.php @@ -238,19 +238,6 @@ function output_xml_report($id) echo ''; echo ''; break; - - /* - case 'TTRT': - break; - - case 'TTO': - break; - - case 'MTBF': - break; - - case 'MTTR': - break;*/ } echo "\n"; diff --git a/pandora_console/extensions/resource_registration.php b/pandora_console/extensions/resource_registration.php index ea9a5f50e8..dae61e3a78 100755 --- a/pandora_console/extensions/resource_registration.php +++ b/pandora_console/extensions/resource_registration.php @@ -375,19 +375,6 @@ function process_upload_xml_report($xml, $group_filter=0) $values['line_separator'] = io_safe_input($item['line_separator']); $values['column_separator'] = io_safe_input($item['column_separator']); break; - - /* - case 'TTRT': - break; - - case 'TTO': - break; - - case 'MTBF': - break; - - case 'MTTR': - break;*/ } if (empty($agents_item)) { diff --git a/pandora_console/extensions/sample_agent.php b/pandora_console/extensions/sample_agent.php new file mode 100644 index 0000000000..ba92debae9 --- /dev/null +++ b/pandora_console/extensions/sample_agent.php @@ -0,0 +1,66 @@ + $id_agente], 'id_agente_modulo'); + $count_modules = count($modules); + + // Update of layout 1 (Rack sample). + $images_rack_server = [ + 'rack_server_rack', + 'rack_server', + 'rack_switch', + 'rack_firewall', + 'rack_double_server', + 'rack_frame', + 'rack_pdu', + ]; + $query = 'UPDATE `tlayout_data` SET `id_agent` = '.$id_agente.', `id_agente_modulo` = CASE '; + for ($i = 0; $i < $count_modules; $i++) { + $query .= 'WHEN `image` = "'.$images_rack_server[$i].'" THEN '.$modules[$i]['id_agente_modulo'].' '; + } + + $query .= 'END WHERE `id_layout` = 1 AND `image` IN ("'.implode('","', $images_rack_server).'");'; + + db_process_sql($query); + // Update of layout 2 (Dashboard). + $query = 'UPDATE `tlayout_data` SET `id_agent`= '.$id_agente.', `id_agente_modulo` = CASE '; + $query .= 'WHEN `id` = 107 THEN '.$modules[0]['id_agente_modulo'].' '; + $query .= 'WHEN `id` = 108 THEN '.$modules[1]['id_agente_modulo'].' '; + $query .= 'WHEN `id` = 109 THEN '.$modules[2]['id_agente_modulo'].' '; + $query .= 'WHEN `id` = 110 THEN '.$modules[2]['id_agente_modulo'].' '; + $query .= 'WHEN `id` = 111 THEN '.$modules[3]['id_agente_modulo'].' '; + $query .= 'WHEN `id` = 112 THEN '.$modules[4]['id_agente_modulo'].' '; + $query .= 'WHEN `id` = 113 THEN '.$modules[5]['id_agente_modulo'].' '; + $query .= 'WHEN `id` = 114 THEN '.$modules[6]['id_agente_modulo'].' '; + $query .= 'END WHERE `id_layout` = 2 AND `id` IN (107,108,109,110,111,112,113,114);'; + + db_process_sql($query); + + // This setting will avoid regenerate all the times the visual consoles. + config_update_value('sample_agent_deployed', 1); +} + +extensions_add_main_function('sample_agent_deployment'); diff --git a/pandora_console/extras/mr/33.sql b/pandora_console/extras/mr/33.sql new file mode 100644 index 0000000000..5dbebab89f --- /dev/null +++ b/pandora_console/extras/mr/33.sql @@ -0,0 +1,13 @@ +START TRANSACTION; + +ALTER TABLE `tlayout_template_data` ADD COLUMN `cache_expiration` INTEGER UNSIGNED NOT NULL DEFAULT 0; + +INSERT INTO `ttipo_modulo` VALUES +(34,'remote_cmd', 10, 'Remote execution, numeric data', 'mod_remote_cmd.png'), +(35,'remote_cmd_proc', 10, 'Remote execution, boolean data', 'mod_remote_cmd_proc.png'), +(36,'remote_cmd_string', 10, 'Remote execution, alphanumeric data', 'mod_remote_cmd_string.png'), +(37,'remote_cmd_inc', 10, 'Remote execution, incremental data', 'mod_remote_cmd_inc.png'); + +INSERT INTO `tconfig`(`token`, `value`) VALUES ('welcome_state', -1); + +COMMIT; diff --git a/pandora_console/extras/pandora_diag.php b/pandora_console/extras/pandora_diag.php index eb9a199456..b047106679 100644 --- a/pandora_console/extras/pandora_diag.php +++ b/pandora_console/extras/pandora_diag.php @@ -1,796 +1,2 @@ - - $value) { - db_process_sql_update( - 'tupdate_settings', - [db_escape_key_identifier('value') => $value], - [db_escape_key_identifier('key') => $key] - ); - } - - ui_print_success_message(__('License updated')); -} - -ui_require_javascript_file_enterprise('load_enterprise'); -enterprise_include_once('include/functions_license.php'); -$license = enterprise_hook('license_get_info'); - -$rows = db_get_all_rows_in_table('tupdate_settings'); - -$settings = new StdClass; -foreach ($rows as $row) { - $settings->{$row['key']} = $row['value']; -} - -echo ''; - - -function render_info($table) -{ - global $console_mode; - - $info = db_get_sql("SELECT COUNT(*) FROM $table"); - render_row($info, "DB Table $table"); -} - - -function render_info_data($query, $label) -{ - global $console_mode; - - $info = db_get_sql($query); - render_row($info, $label); -} - - -function render_row($data, $label) -{ - global $console_mode; - - if ($console_mode == 1) { - echo $label; - echo '|'; - echo $data; - echo "\n"; - } else { - echo ''; - echo "
".$label; - echo '
'; - echo "
".$data; - echo '
'; - echo ''; - } -} - - -function get_value_sum($arr) -{ - foreach ($arr as $clave) { - foreach ($clave as $valor) { - if (is_numeric($valor) === true) { - $result += $valor; - } - } - } - - return $result; -} - - -function execution_time() -{ - $times = db_get_all_rows_sql('SELECT datos FROM tagente_datos WHERE id_agente_modulo = 29 ORDER BY utimestamp DESC LIMIT 2'); - if ($times[0]['datos'] > ($times[1]['datos'] * 1.2)) { - return "Warning Status   The execution time could be degrading. For a more extensive information of this data consult the Execution Time graph"; - } else { - return "Normal Status   The execution time is correct. For more information about this data, check the Execution Time graph"; - } -} - - -function get_logs_size($file) -{ - $file_name = '/var'.$file.''; - $size_server_log = filesize($file_name); - return $size_server_log; - -} - - -function get_status_logs($path) -{ - $status_server_log = ''; - $size_server_log = number_format(get_logs_size($path)); - $size_server_log = (0 + str_replace(',', '', $size_server_log)); - if ($size_server_log <= 10485760) { - $status_server_log = "Normal Status   You have less than 10 MB of logs"; - } else { - $status_server_log = "Warning Status   You have more than 10 MB of logs"; - } - - return $status_server_log; -} - - -function percentage_modules_per_agent() -{ - $status_average_modules = ''; - $total_agents = db_get_value_sql('SELECT count(*) FROM tagente'); - $total_modules = db_get_value_sql('SELECT count(*) FROM tagente_modulo'); - $average_modules_per_agent = ($total_modules / $total_agents); - if ($average_modules_per_agent <= 40) { - $status_average_modules = "Normal Status   The average of modules per agent is less than 40"; - } else { - $status_average_modules = "Warning Status  The average of modules per agent is more than 40. You can have performance problems"; - } - - return $status_average_modules; -} - - -function license_capacity() -{ - $license = enterprise_hook('license_get_info'); - $license_limit = $license['limit']; - $status_license_capacity = ''; - $current_count = db_get_value_sql('SELECT count(*) FROM tagente'); - if ($current_count > ($license_limit * 90 / 100)) { - $status_license_capacity = "Warning Status   License capacity exceeds 90 percent"; - } else { - $status_license_capacity = "Normal Status   License capacity is less than 90 percent"; - } - - return $status_license_capacity; -} - - -function status_license_params($license_param) -{ - $status_license_par = ''; - if ($license_param <= 0) { - $status_license_par = 'OFF'; - } else { - $status_license_par = 'ON'; - } - - return $status_license_par; -} - - -function interval_average_of_network_modules() -{ - $total_network_modules = db_get_value_sql('SELECT count(*) FROM tagente_modulo WHERE id_tipo_modulo BETWEEN 6 AND 18'); - $total_module_interval_time = db_get_value_sql('SELECT SUM(module_interval) FROM tagente_modulo WHERE id_tipo_modulo BETWEEN 6 AND 18'); - $average_time = ((int) $total_module_interval_time / $total_network_modules); - - if ($average_time < 180) { - $status_average_modules = "Warning Status   The system is overloaded (average time $average_time) and a very fine configuration is required"; - } else { - $status_average_modules = "Normal Status   The system is not overloaded (average time $average_time) "; - } - - if ($average_time == 0) { - $status_average_modules = "Normal Status   The system has no load"; - } - - return $status_average_modules; -} - - -$attachment_total_files = count(glob($config['homedir'].'/attachment/{*.*}', GLOB_BRACE)); - - -function files_attachment_folder($total_files) -{ - if ($total_files <= 700) { - $status_total_files = "Normal Status   The attached folder contains less than 700 files."; - } else { - $status_total_files = "Warning Status   The attached folder contains more than 700 files."; - } - - return $status_total_files; -} - - -$tagente_datos_size = db_get_value_sql('SELECT COUNT(*) FROM tagente_datos'); - - -function status_tagente_datos($tagente_datos_size) -{ - if ($tagente_datos_size <= 3000000) { - $tagente_datos_size = "Normal Status   The tagente_datos table contains an acceptable amount of data."; - } else { - $tagente_datos_size = "Warning Status   The tagente_datos table contains too much data. A historical database is recommended."; - } - - return $tagente_datos_size; -} - - -function status_values($val_rec, $val) -{ - if ($val_rec <= $val) { - return $val." (Min. Recommended Value ".$val_rec.')'; - } else { - return $val." (Min. Recommended Value ".$val_rec.") Warning Status"; - } -} - - -$tables_fragmentation = db_get_sql( - "SELECT (data_free/(index_length+data_length)) -as frag_ratio from information_schema.tables where DATA_FREE > 0 and table_name='tagente_datos' and table_schema='pandora'" -); -$db_size = db_get_all_rows_sql( - 'SELECT table_schema, -ROUND(SUM(data_length+index_length)/1024/1024,3) -FROM information_schema.TABLES -GROUP BY table_schema;' -); - -if (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN') { - $total_server_threads = shell_exec('ps -T aux | grep pandora_server | grep -v grep | wc -l'); - $percentage_threads_ram = shell_exec("ps axo pmem,cmd | grep pandora_server | awk '{sum+=$1} END {print sum}'"); - $percentage_threads_cpu = shell_exec("ps axo pcpu,cmd | grep pandora_server | awk '{sum+=$1} END {print sum}'"); - $innodb_buffer_pool_size_min_rec_value = shell_exec("cat /proc/meminfo | grep -i total | head -1 | awk '{print $(NF-1)*0.4/1024}'"); -} - -$path_server_logs = '/log/pandora/pandora_server.log'; -$path_err_logs = '/log/pandora/pandora_server.error'; -$path_console_logs = '/www/html/pandora_console/pandora_console.log'; -$innodb_log_file_size_min_rec_value = '64M'; -$innodb_log_buffer_size_min_rec_value = '16M'; -$innodb_flush_log_at_trx_commit_min_rec_value = 0; -$query_cache_limit_min_rec_value = 2; -$max_allowed_packet_min_rec_value = 32; -$innodb_buffer_pool_size_min_rec_value = shell_exec("cat /proc/meminfo | grep -i total | head -1 | awk '{print $(NF-1)*0.4/1024}'"); -$sort_buffer_size_min_rec_value = 32; -$join_buffer_size_min_rec_value = 265; -$query_cache_type_min_rec_value = 'ON'; -$query_cache_size_min_rec_value = 24; -$innodb_lock_wait_timeout_max_rec_value = 120; -$tables_fragmentation_max_rec_value = 10; -$thread_cache_size_max_rec_value = 8; -$thread_stack_min_rec_value = 256; -$max_connections_max_rec_value = 150; -$key_buffer_size_min_rec_value = 256; -$read_buffer_size_min_rec_value = 32; -$read_rnd_buffer_size_min_rec_value = 32; -$query_cache_min_res_unit_min_rec_value = 2; -$innodb_file_per_table_min_rec_value = 1; - - -function status_fragmentation_tables($tables_fragmentation_max_rec_value, $tables_fragmentation) -{ - $status_tables_frag = ''; - if ($tables_fragmentation > $tables_fragmentation_max_rec_value) { - $status_tables_frag = "Warning Status   Table fragmentation is higher than recommended. They should be defragmented."; - } else { - $status_tables_frag = "Normal Status   Table fragmentation is correct."; - } - - return $status_tables_frag; -} - - -$console_mode = 1; -if (!isset($argc)) { - $console_mode = 0; -} - -if ($console_mode == 1) { - echo "\nPandora FMS PHP diagnostic tool v3.2 (c) Artica ST 2009-2010 \n"; - - if ($argc == 1 || in_array($argv[1], ['--help', '-help', '-h', '-?'])) { - echo "\nThis command line script contains information about Pandora FMS database. - This program can only be executed from the console, and it needs a parameter, the - full path to Pandora FMS 'config.php' file. - - Usage: - php pandora_diag.php path_to_pandora_console - - Example: - php pandora_diag.php /var/www/pandora_console - -"; - exit; - } - - if (preg_match('/[^a-zA-Z0-9_\/\.]|(\/\/)|(\.\.)/', $argv[1])) { - echo "Invalid path: $argv[1]. Always use absolute paths."; - exit; - } - - include $argv[1].'/include/config.php'; -} else { - if (file_exists('../include/config.php')) { - include '../include/config.php'; - } - - // Not from console, this is a web session. - if ((!isset($config['id_user'])) || (!check_acl($config['id_user'], 0, 'PM'))) { - echo "

You don't have privileges to use diagnostic tool

"; - echo '

Please login with an administrator account before try to use this tool

'; - exit; - } - - // Header. - ui_print_page_header( - __('Pandora FMS Diagnostic tool'), - '', - false, - 'diagnostic_tool_tab', - true - ); - - echo ""; - echo "'; -} - -render_row($build_version, 'Pandora FMS Build'); -render_row($pandora_version, 'Pandora FMS Version'); -render_info_data("SELECT value FROM tconfig where token ='MR'", 'Minor Release'); -render_row($config['homedir'], 'Homedir'); -render_row($config['homeurl'], 'HomeUrl'); -render_info_data( - "SELECT `value` - FROM tconfig - WHERE `token` = 'enterprise_installed'", - 'Enterprise installed' -); - - $full_key = db_get_sql( - "SELECT value - FROM tupdate_settings - WHERE `key` = 'customer_key'" - ); - - $compressed_key = substr($full_key, 0, 5).'...'.substr($full_key, -5); - - render_row($compressed_key, 'Update Key'); - - render_info_data( - "SELECT value - FROM tupdate_settings - WHERE `key` = 'updating_code_path'", - 'Updating code path' - ); - - render_info_data( - "SELECT value - FROM tupdate_settings - WHERE `key` = 'current_update'", - 'Current Update #' - ); - - - echo "'; - - - render_row(phpversion(), 'PHP Version'); - - render_row(ini_get('max_execution_time').' seconds', 'PHP Max execution time'); - - render_row(ini_get('max_input_time').' seconds', 'PHP Max input time'); - - render_row(ini_get('memory_limit'), 'PHP Memory limit'); - - render_row(ini_get('session.cookie_lifetime'), 'Session cookie lifetime'); - - echo "'; - - render_info_data('SELECT COUNT(*) FROM tagente', 'Total agents'); - render_info_data('SELECT COUNT(*) FROM tagente_modulo', 'Total modules'); - render_info_data('SELECT COUNT(*) FROM tgrupo', 'Total groups'); - render_info_data('SELECT COUNT(*) FROM tagente_datos', 'Total module data records'); - render_info_data('SELECT COUNT(*) FROM tagent_access', 'Total agent access record'); - render_info_data('SELECT COUNT(*) FROM tevento', 'Total events'); - - if ($config['enterprise_installed']) { - render_info_data('SELECT COUNT(*) FROM ttrap', 'Total traps'); - } - - render_info_data('SELECT COUNT(*) FROM tusuario', 'Total users'); - render_info_data('SELECT COUNT(*) FROM tsesion', 'Total sessions'); - - echo "'; - - render_info_data( - 'SELECT COUNT( DISTINCT tagente.id_agente) - FROM tagente_estado, tagente, tagente_modulo - WHERE tagente.disabled = 0 - AND tagente_modulo.id_agente_modulo = tagente_estado.id_agente_modulo - AND tagente_modulo.disabled = 0 - AND tagente_estado.id_agente = tagente.id_agente - AND tagente_estado.estado = 3', - 'Total unknown agents' - ); - - render_info_data( - 'SELECT COUNT(tagente_estado.estado) - FROM tagente_estado - WHERE tagente_estado.estado = 4', - 'Total not-init modules' - ); - - - $last_run_difference = ''; - - $diferencia = (time() - date( - db_get_sql( - "SELECT `value` - FROM tconfig - WHERE `token` = 'db_maintance'" - ) - )); - - $last_run_difference_months = 0; - $last_run_difference_weeks = 0; - $last_run_difference_days = 0; - $last_run_difference_minutos = 0; - $last_run_difference_seconds = 0; - - while ($diferencia >= 2419200) { - $diferencia -= 2419200; - $last_run_difference_months++; - } - - while ($diferencia >= 604800) { - $diferencia -= 604800; - $last_run_difference_weeks++; - } - - while ($diferencia >= 86400) { - $diferencia -= 86400; - $last_run_difference_days++; - } - - while ($diferencia >= 3600) { - $diferencia -= 3600; - $last_run_difference_hours++; - } - - while ($diferencia >= 60) { - $diferencia -= 60; - $last_run_difference_minutes++; - } - - $last_run_difference_seconds = $diferencia; - - if ($last_run_difference_months > 0) { - $last_run_difference .= $last_run_difference_months.'month/s '; - } - - if ($last_run_difference_weeks > 0) { - $last_run_difference .= $last_run_difference_weeks.' week/s '; - } - - if ($last_run_difference_days > 0) { - $last_run_difference .= $last_run_difference_days.' day/s '; - } - - if ($last_run_difference_hours > 0) { - $last_run_difference .= $last_run_difference_hours.' hour/s '; - } - - if ($last_run_difference_minutes > 0) { - $last_run_difference .= $last_run_difference_minutes.' minute/s '; - } - - $last_run_difference .= $last_run_difference_seconds.' second/s ago'; - - render_row( - date( - 'Y/m/d H:i:s', - db_get_sql( - "SELECT `value` - FROM tconfig - WHERE `token` = 'db_maintance'" - ) - ).' ('.$last_run_difference.')'.' *', - 'PandoraDB Last run' - ); - - echo "'; - - switch ($config['dbtype']) { - case 'mysql': - render_info_data( - "SELECT `value` - FROM tconfig - WHERE `token` = 'db_scheme_first_version'", - 'DB Schema Version (first installed)' - ); - render_info_data( - "SELECT `value` - FROM tconfig - WHERE `token` = 'db_scheme_version'", - 'DB Schema Version (actual)' - ); - render_info_data( - "SELECT `value` - FROM tconfig - WHERE `token` = 'db_scheme_build'", - 'DB Schema Build' - ); - - render_row(get_value_sum($db_size).'M', 'DB Size'); - - - if (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN') { - echo "'; - - $output = 'cat /proc/cpuinfo | grep "model name" | tail -1 | cut -f 2 -d ":"'; - $output2 = 'cat /proc/cpuinfo | grep "processor" | wc -l'; - - render_row(exec($output).' x '.exec($output2), 'CPU'); - - $output = 'cat /proc/meminfo | grep "MemTotal"'; - - render_row(exec($output), 'RAM'); - } - break; - - case 'postgresql': - render_info_data( - "SELECT \"value\" - FROM tconfig - WHERE \"token\" = 'db_scheme_version'", - 'DB Schema Version' - ); - render_info_data( - "SELECT \"value\" - FROM tconfig - WHERE \"token\" = 'db_scheme_build'", - 'DB Schema Build' - ); - render_info_data( - "SELECT \"value\" - FROM tconfig - WHERE \"token\" = 'enterprise_installed'", - 'Enterprise installed' - ); - render_row( - date( - 'Y/m/d H:i:s', - db_get_sql( - "SELECT \"value\" - FROM tconfig WHERE \"token\" = 'db_maintance'" - ) - ), - 'PandoraDB Last run' - ); - - render_info_data( - "SELECT value - FROM tupdate_settings - WHERE \"key\" = 'customer_key';", - 'Update Key' - ); - render_info_data( - "SELECT value - FROM tupdate_settings - WHERE \"key\" = 'updating_code_path'", - 'Updating code path' - ); - render_info_data( - "SELECT value - FROM tupdate_settings - WHERE \"key\" = 'current_update'", - 'Current Update #' - ); - break; - - case 'oracle': - render_info_data( - "SELECT value - FROM tconfig - WHERE token = 'db_scheme_version'", - 'DB Schema Version' - ); - render_info_data( - "SELECT value - FROM tconfig - WHERE token = 'db_scheme_build'", - 'DB Schema Build' - ); - render_info_data( - "SELECT value - FROM tconfig - WHERE token = 'enterprise_installed'", - 'Enterprise installed' - ); - render_row( - db_get_sql( - "SELECT value - FROM tconfig - WHERE token = 'db_maintance'" - ), - 'PandoraDB Last run' - ); - - render_info_data( - 'SELECT '.db_escape_key_identifier('value')." FROM tupdate_settings - WHERE \"key\" = 'customer_key'", - 'Update Key' - ); - render_info_data( - 'SELECT '.db_escape_key_identifier('value')." FROM tupdate_settings - WHERE \"key\" = 'updating_code_path'", - 'Updating code path' - ); - render_info_data( - 'SELECT '.db_escape_key_identifier('value')." FROM tupdate_settings - WHERE \"key\" = 'current_update'", - 'Current Update #' - ); - break; - } - - $innodb_log_file_size = (db_get_value_sql('SELECT @@innodb_log_file_size') / 1048576); - $innodb_log_buffer_size = (db_get_value_sql('SELECT @@innodb_log_buffer_size') / 1048576); - $innodb_flush_log_at_trx_commit = db_get_value_sql('SELECT @@innodb_flush_log_at_trx_commit'); - $max_allowed_packet = (db_get_value_sql('SELECT @@max_allowed_packet') / 1048576); - $innodb_buffer_pool_size = (db_get_value_sql('SELECT @@innodb_buffer_pool_size') / 1024); - $sort_buffer_size = number_format((db_get_value_sql('SELECT @@sort_buffer_size') / 1024), 2); - $join_buffer_size = (db_get_value_sql('SELECT @@join_buffer_size') / 1024); - $query_cache_type = db_get_value_sql('SELECT @@query_cache_type'); - $query_cache_size = (db_get_value_sql('SELECT @@query_cache_size') / 1048576); - $query_cache_limit = (db_get_value_sql('SELECT @@query_cache_limit') / 1048576); - $innodb_lock_wait_timeout = db_get_value_sql('SELECT @@innodb_lock_wait_timeout'); - $thread_cache_size = db_get_value_sql('SELECT @@thread_cache_size'); - $thread_stack = (db_get_value_sql('SELECT @@thread_stack') / 1024); - $max_connections = db_get_value_sql('SELECT @@max_connections'); - $key_buffer_size = (db_get_value_sql('SELECT @@key_buffer_size') / 1024); - $read_buffer_size = (db_get_value_sql('SELECT @@read_buffer_size') / 1024); - $read_rnd_buffer_size = (db_get_value_sql('SELECT @@read_rnd_buffer_size') / 1024); - $query_cache_min_res_unit = (db_get_value_sql('SELECT @@query_cache_min_res_unit') / 1024); - $innodb_file_per_table = db_get_value_sql('SELECT @@innodb_file_per_table'); - echo "'; - - render_row(status_values($innodb_log_file_size_min_rec_value, $innodb_log_file_size), 'InnoDB log file size ', 'InnoDB log file size '); - render_row(status_values($innodb_log_buffer_size_min_rec_value, $innodb_log_buffer_size), 'InnoDB log buffer size ', 'InnoDB log buffer size '); - render_row(status_values($innodb_flush_log_at_trx_commit_min_rec_value, $innodb_flush_log_at_trx_commit), 'InnoDB flush log at trx-commit ', 'InnoDB flush log at trx-commit '); - render_row(status_values($max_allowed_packet_min_rec_value, $max_allowed_packet), 'Maximun allowed packet ', 'Maximun allowed packet '); - render_row(status_values($innodb_buffer_pool_size_min_rec_value, $innodb_buffer_pool_size), 'InnoDB buffer pool size ', 'InnoDB buffer pool size '); - render_row(status_values($sort_buffer_size_min_rec_value, $sort_buffer_size), 'Sort buffer size ', 'Sort buffer size '); - render_row(status_values($join_buffer_size_min_rec_value, $join_buffer_size), 'Join buffer size ', 'Join buffer size '); - render_row(status_values($query_cache_type_min_rec_value, $query_cache_type), 'Query cache type ', 'Query cache type '); - render_row(status_values($query_cache_size_min_rec_value, $query_cache_size), 'Query cache size ', 'Query cache size '); - render_row(status_values($query_cache_limit_min_rec_value, $query_cache_limit), 'Query cache limit ', 'Query cache limit '); - render_row(status_values($innodb_lock_wait_timeout_max_rec_value, $innodb_lock_wait_timeout), 'InnoDB lock wait timeout ', 'InnoDB lock wait timeout '); - render_row(status_values($thread_cache_size_max_rec_value, $thread_cache_size), 'Thread cache size ', 'Thread cache size '); - render_row(status_values($thread_stack_min_rec_value, $thread_stack), 'Thread stack ', 'Thread stack '); - render_row(status_values($max_connections_max_rec_value, $max_connections), 'Maximum connections ', 'Maximun connections '); - render_row(status_values($key_buffer_size_min_rec_value, $key_buffer_size), 'Key buffer size ', 'Key buffer size '); - render_row(status_values($read_buffer_size_min_rec_value, $read_buffer_size), 'Read buffer size ', 'Read buffer size '); - render_row(status_values($read_rnd_buffer_size_min_rec_value, $read_rnd_buffer_size), 'Read rnd-buffer size ', 'Read rnd-buffer size '); - render_row(status_values($query_cache_min_res_unit_min_rec_value, $query_cache_min_res_unit), 'Query cache min-res-unit ', 'Query cache min-res-unit '); - render_row(status_values($innodb_file_per_table_min_rec_value, $innodb_file_per_table), 'InnoDB file per table ', 'InnoDB file per table '); - echo "'; - - - - render_row($tables_fragmentation_max_rec_value.'%', 'Tables fragmentation (maximum recommended value)'); - render_row(number_format($tables_fragmentation, 2).'%', 'Tables fragmentation (current value)'); - render_row(status_fragmentation_tables($tables_fragmentation_max_rec_value, $tables_fragmentation), 'Table fragmentation status'); - - echo "'; - - render_row(number_format((get_logs_size($path_server_logs) / 1048576), 3).'M', 'Size server logs (current value)'); - render_row(get_status_logs($path_server_logs), 'Status server logs'); - render_row(number_format((get_logs_size($path_err_logs) / 1048576), 3).'M', 'Size error logs (current value)'); - render_row(get_status_logs($path_err_logs), 'Status error logs'); - render_row(number_format((get_logs_size($path_console_logs) / 1048576), 3).'M', 'Size console logs (current value)'); - render_row(get_status_logs($path_console_logs), 'Status console logs'); - - echo "'; - - render_row(html_print_textarea('keys[customer_key]', 10, 255, $settings->customer_key, 'style="height:40px; width:450px;"', true), 'Customer key'); - render_row($license['expiry_date'], $license['expiry_caption']); - render_row($license['limit'].' agents', 'Platform Limit'); - render_row($license['count'].' agents', 'Current Platform Count'); - render_row($license['count_enabled'].' agents', 'Current Platform Count (enabled: items)'); - render_row($license['count_disabled'].' agents', 'Current Platform Count (disabled: items)'); - render_row($license['license_mode'], 'License Mode'); - render_row(status_license_params($license['nms']), 'Network Management System'); - render_row(status_license_params($license['dhpm']), 'Satellite'); - render_row($license['licensed_to'], 'Licensed to'); - render_row(license_capacity(), 'Status of agents capacity'); - render_row(percentage_modules_per_agent(), 'Status of average modules per agent'); - render_row(interval_average_of_network_modules(), 'Interval average of the network modules'); - - echo "'; - - render_row($attachment_total_files, 'Total files in the attached folder'); - render_row(files_attachment_folder($attachment_total_files), 'Status of the attachment folder'); - - echo "'; - - render_row($tagente_datos_size, 'Total data in tagente_datos table'); - render_row(status_tagente_datos($tagente_datos_size), 'Tangente_datos table status'); - render_row(execution_time(), 'Execution time degradation when executing a count'); - - echo "'; - - render_row($total_server_threads, 'Total server threads'); - render_row($percentage_threads_ram.'%', 'Percentage of threads used by the RAM'); - render_row($percentage_threads_cpu.'%', 'Percentage of threads used by the CPU'); - - echo "'; - - $server_name = db_get_value_sql('SELECT name FROM tserver WHERE master = 1'); - $agent_id = db_get_value_sql("SELECT id_agente FROM tagente WHERE nombre = '$server_name'"); - - $id_modules = agents_get_modules($agent_id); - - $id_modules = [ - modules_get_agentmodule_id('Agents_Unknown', $agent_id), - modules_get_agentmodule_id('Database Maintenance', $agent_id), - modules_get_agentmodule_id('FreeDisk_SpoolDir', $agent_id), - modules_get_agentmodule_id('Free_RAM', $agent_id), - modules_get_agentmodule_id('Queued_Modules', $agent_id), - modules_get_agentmodule_id('Status', $agent_id), - modules_get_agentmodule_id('System_Load_AVG', $agent_id), - modules_get_agentmodule_id('Execution_time', $agent_id), - ]; - - foreach ($id_modules as $id_module) { - $params = [ - 'agent_module_id' => $id_module['id_agente_modulo'], - 'period' => SECONDS_1MONTH, - 'date' => time(), - 'height' => '150', - ]; - render_row(grafico_modulo_sparse($params), 'Graph of the '.$id_module['nombre'].' module.'); - } - - if ($console_mode == 0) { - echo '
".__('Pandora status info').'
".__('PHP setup').'
".__('Database size stats').'
".__('Database sanity').'
".__('Database status info').'
".__('System info').'
".__('MySQL Performance metrics').' '.ui_print_help_icon('performance_metrics_tab', true).'
".__('Tables fragmentation in the Pandora FMS database').'
".__(' Pandora FMS logs dates').'
".__(' Pandora FMS Licence Information').'
".__(' Status of the attachment folder').'
".__(' Information from the tagente_datos table').'
".__(' Pandora FMS server threads').'
".__(' Graphs modules that represent the self-monitoring system').'
'; - } - - echo "
"; - - echo ''.__( - '(*) Please check your Pandora Server setup and make sure that the database maintenance daemon is running. It\' is very important to - keep the database up-to-date to get the best performance and results in Pandora' - ).'


'; +// remove file. diff --git a/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql b/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql index c2becce397..36d19424c8 100644 --- a/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql +++ b/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql @@ -1396,9 +1396,6 @@ ALTER TABLE tagente_modulo ADD COLUMN `dynamic_two_tailed` tinyint(1) unsigned d ALTER TABLE tagente_modulo ADD COLUMN `parent_module_id` int(10) unsigned NOT NULL default 0; ALTER TABLE `tagente_modulo` ADD COLUMN `cps` int NOT NULL default 0; ALTER TABLE `tagente_modulo` ADD COLUMN `ff_type` tinyint(1) unsigned default '0'; -ALTER TABLE `tagente_modulo` ADD COLUMN `ff_normal` int(4) unsigned default '0'; -ALTER TABLE `tagente_modulo` ADD COLUMN `ff_warning` int(4) unsigned default '0'; -ALTER TABLE `tagente_modulo` ADD COLUMN `ff_critical` int(4) unsigned default '0'; ALTER TABLE `tagente_modulo` DROP COLUMN `ff_normal`, DROP COLUMN `ff_warning`, DROP COLUMN `ff_critical`, @@ -1757,7 +1754,12 @@ INSERT INTO tmodule VALUES (8, 'Wux module'); -- Table `ttipo_modulo` -- --------------------------------------------------------------------- -INSERT INTO ttipo_modulo VALUES (25,'web_analysis', 8, 'Web analysis data', 'module-wux.png'); +INSERT INTO `ttipo_modulo` VALUES +(25,'web_analysis', 8, 'Web analysis data', 'module-wux.png'), +(34,'remote_cmd', 10, 'Remote execution, numeric data', 'mod_remote_cmd.png'), +(35,'remote_cmd_proc', 10, 'Remote execution, boolean data', 'mod_remote_cmd_proc.png'), +(36,'remote_cmd_string', 10, 'Remote execution, alphanumeric data', 'mod_remote_cmd_string.png'), +(37,'remote_cmd_inc', 10, 'Remote execution, incremental data', 'mod_remote_cmd_inc.png'); -- --------------------------------------------------------------------- -- Table `tdashboard` @@ -2010,6 +2012,7 @@ CREATE TABLE IF NOT EXISTS `tlayout_template_data` ( `linked_layout_status_as_service_warning` FLOAT(20, 3) NOT NULL default 0, `linked_layout_status_as_service_critical` FLOAT(20, 3) NOT NULL default 0, `linked_layout_node_id` INT(10) NOT NULL default 0, + `cache_expiration` INTEGER UNSIGNED NOT NULL default 0, PRIMARY KEY(`id`), FOREIGN KEY (`id_layout_template`) REFERENCES tlayout_template(`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE = InnoDB DEFAULT CHARSET=utf8; @@ -2423,4 +2426,4 @@ ALTER TABLE `trecon_script` ADD COLUMN `type` int(11) NOT NULL DEFAULT '0'; -- --------------------------------------------------------------------- -- Table `tusuario_perfil` -- --------------------------------------------------------------------- -ALTER TABLE `tusuario_perfil` MODIFY COLUMN `no_hierarchy` tinyint(1) NOT NULL DEFAULT '0'; \ No newline at end of file +ALTER TABLE `tusuario_perfil` MODIFY COLUMN `no_hierarchy` tinyint(1) NOT NULL DEFAULT '0'; diff --git a/pandora_console/general/alert_enterprise.php b/pandora_console/general/alert_enterprise.php index 69a09d2998..4cb4a29740 100644 --- a/pandora_console/general/alert_enterprise.php +++ b/pandora_console/general/alert_enterprise.php @@ -105,7 +105,7 @@ if (check_login()) { echo __( "This is the online help for %s console. This help is -in best cases- just a brief contextual help, not intented to teach you how to use %s. Official documentation of %s is about 900 pages, and you probably don't need to read it entirely, but sure, you should download it and take a look.

- Download the official documentation", + Download the official documentation", get_product_name(), get_product_name(), get_product_name(), diff --git a/pandora_console/general/firts_task/planned_downtime.php b/pandora_console/general/firts_task/planned_downtime.php index dcd98fdebb..21bfb4b083 100644 --- a/pandora_console/general/firts_task/planned_downtime.php +++ b/pandora_console/general/firts_task/planned_downtime.php @@ -33,7 +33,7 @@ ui_require_css_file('firts_task'); ); ?>

-
+
diff --git a/pandora_console/general/header.php b/pandora_console/general/header.php index 99bb38cc21..3a355a8f69 100644 --- a/pandora_console/general/header.php +++ b/pandora_console/general/header.php @@ -328,22 +328,40 @@ if ($config['menu_type'] == 'classic') { $header_autorefresh_counter .= $autorefresh_additional; $header_autorefresh_counter .= ''; + // Button for feedback pandora. + if (enterprise_installed()) { + $header_feedback = '
'; + $header_feedback .= ''; + $header_feedback .= ''; + $header_feedback .= html_print_image( + '/images/feedback-header.png', + true, + [ + 'title' => __('Feedback'), + 'id' => 'feedback-header', + 'alt' => __('Feedback'), + 'style' => 'cursor: pointer; width: 27px;', + ] + ); + $header_feedback .= '
'; + } + // Support. - if (defined('PANDORA_ENTERPRISE')) { - $header_support_link = 'https://support.artica.es/'; + if (enterprise_installed()) { + $header_support_link = $config['custom_support_url']; } else { $header_support_link = 'https://pandorafms.com/forums/'; } $header_support = '
'; - $header_support .= ''; + $header_support .= ''; $header_support .= html_print_image('/images/header_support.png', true, ['title' => __('Go to support'), 'class' => 'bot', 'alt' => 'user']); $header_support .= '
'; // Documentation. $header_docu = '
'; - $header_docu .= ''; + $header_docu .= ''; $header_docu .= html_print_image('/images/header_docu.png', true, ['title' => __('Go to documentation'), 'class' => 'bot', 'alt' => 'user']); $header_docu .= '
'; @@ -388,9 +406,9 @@ if ($config['menu_type'] == 'classic') { echo '
'.$config['custom_title_header'].''.$config['custom_subtitle_header'].'
'.$header_searchbar.'
-
'.$header_chat, $header_autorefresh, $header_autorefresh_counter, $header_discovery, $servers_list, $header_support, $header_docu, $header_user, $header_logout.'
'; +
'.$header_chat, $header_autorefresh, $header_autorefresh_counter, $header_discovery, $servers_list, $header_feedback, $header_support, $header_docu, $header_user, $header_logout.'
'; ?> - + @@ -610,8 +628,41 @@ if ($config['menu_type'] == 'classic') { }); var fixed_header = ; - + var new_chat = ; + + /** + * Loads modal from AJAX to add feedback. + */ + function show_feedback() { + var btn_ok_text = ''; + var btn_cancel_text = ''; + var title = ''; + var url = ''; + + load_modal({ + target: $('#modal-feedback-form'), + form: 'modal_form_feedback', + url: '', + modal: { + title: title, + ok: btn_ok_text, + cancel: btn_cancel_text, + }, + onshow: { + page: url, + method: 'formFeedback', + }, + onsubmit: { + page: url, + method: 'createdScheduleFeedbackTask', + dataType: 'json', + }, + ajax_callback: generalShowMsg, + idMsgCallback: 'msg-header', + }); + } + $(document).ready (function () { // Check new notifications on a periodic way @@ -661,7 +712,17 @@ if ($config['menu_type'] == 'classic') { $("#ui_close_dialog_titlebar").click(function () { $("#agent_access").css("display",""); }); - + + + // Feedback. + $("#feedback-header").click(function () { + // Clean DOM. + $("#feedback-header").empty(); + // Function charge Modal. + show_feedback(); + }); + + function blinkpubli(){ $(".publienterprise").delay(100).fadeTo(300,0.2).delay(100).fadeTo(300,1, blinkpubli); } diff --git a/pandora_console/general/help_feedback.php b/pandora_console/general/help_feedback.php new file mode 100644 index 0000000000..1f702d6d36 --- /dev/null +++ b/pandora_console/general/help_feedback.php @@ -0,0 +1,77 @@ + '[HelpFeedBack]'.$e->getMessage() ]); + exit; + } else { + echo '[HelpFeedBack]'.$e->getMessage(); + } + + // Stop this execution, but continue 'globally'. + return; +} + +// Ajax controller. +if (is_ajax()) { + $method = get_parameter('method', ''); + + if (method_exists($helpfeedback, $method) === true) { + if ($helpfeedback->ajaxMethod($method) === true) { + $helpfeedback->{$method}(); + } else { + $helpfeedback->error('Unavailable method.'); + } + } else { + $helpfeedback->error('Method not found. ['.$method.']'); + } + + + // Stop any execution. + exit; +} else { + // Run. + $helpfeedback->run(); +} diff --git a/pandora_console/general/login_help_dialog.php b/pandora_console/general/login_help_dialog.php index 323b465d5a..b02c47cea9 100644 --- a/pandora_console/general/login_help_dialog.php +++ b/pandora_console/general/login_help_dialog.php @@ -87,7 +87,7 @@ echo '
'; - echo ''.html_print_image( + echo ''.html_print_image( 'images/documentation.png', true, [ @@ -96,7 +96,7 @@ echo '
'; - echo ''.__('Documentation').''; + echo ''.__('Documentation').''; echo ''; echo ''; echo ''; diff --git a/pandora_console/general/login_page.php b/pandora_console/general/login_page.php index 5aecfcc92c..7d4ebe7e04 100755 --- a/pandora_console/general/login_page.php +++ b/pandora_console/general/login_page.php @@ -88,6 +88,24 @@ if (!empty($config['login_background'])) { $login_body_style = "style=\"background:linear-gradient(74deg, #02020255 36%, transparent 36%), url('".$background_url."');\""; } +// Get alternative custom in case of db fail. +$custom_fields = [ + 'custom_logo_login', + 'custom_splash_login', + 'custom_title1_login', + 'custom_title2_login', + 'rb_product_name', +]; + +foreach ($custom_fields as $field) { + if (!isset($config[$field])) { + if (isset($config[$field.'_alt'])) { + $config[$field] = $config[$field.'_alt']; + $custom_conf_enabled = true; + } + } +} + // Get the custom icons. $docs_logo = ui_get_docs_logo(); $support_logo = ui_get_support_logo(); @@ -102,7 +120,7 @@ if ($docs_logo !== false) { echo '
  • '.__('Docs').'
  • '; if (file_exists(ENTERPRISE_DIR.'/load_enterprise.php')) { if ($support_logo !== false) { - echo '
  • support
  • '; + echo '
  • support
  • '; } echo '
  • '.__('Support').'
  • '; @@ -133,7 +151,7 @@ if (defined('METACONSOLE')) { html_print_image('enterprise/images/custom_logo_login/'.$config['custom_logo_login'], false, ['class' => 'login_logo', 'alt' => 'logo', 'border' => 0, 'title' => $logo_title], false, true); } } else { - if (!isset($config['custom_logo_login']) || $config['custom_logo_login'] == 0) { + if (!isset($config['custom_logo_login']) || $config['custom_logo_login'] === 0) { html_print_image('images/custom_logo_login/pandora_logo.png', false, ['class' => 'login_logo', 'alt' => 'logo', 'border' => 0, 'title' => $logo_title], false, true); } else { html_print_image('images/custom_logo_login/'.$config['custom_logo_login'], false, ['class' => 'login_logo', 'alt' => 'logo', 'border' => 0, 'title' => $logo_title], false, true); @@ -423,9 +441,14 @@ if ($login_screen == 'logout') { } switch ($login_screen) { - case 'error_authconfig': case 'error_dbconfig': - $title = __('Problem with %s database', get_product_name()); + case 'error_authconfig': + if (!isset($config['rb_product_name_alt'])) { + $title = __('Problem with %s database', get_product_name()); + } else { + $title = __('Problem with %s database', $config['rb_product_name_alt']); + } + $message = __( 'Cannot connect to the database, please check your database setup in the include/config.php file.

    Probably your database, hostname, user or password values are incorrect or diff --git a/pandora_console/general/mysqlerr.php b/pandora_console/general/mysqlerr.php index 40da530386..9abd62691f 100644 --- a/pandora_console/general/mysqlerr.php +++ b/pandora_console/general/mysqlerr.php @@ -83,7 +83,6 @@ background:black;opacity:0.1;left:0px;top:0px;width:100%;height:100%; -
    @@ -100,10 +99,29 @@ background:black;opacity:0.1;left:0px;top:0px;width:100%;height:100%; ?>
    -
    -
    - -
    + $value) { + if (preg_match('/._alt/i', $key)) { + $custom_conf_enabled = true; + break; + } + } + + if (!$custom_conf_enabled) { + echo ' +
    +
    + '.__('Documentation').' + +
    +
    + '; + } + + ?> + +
    diff --git a/pandora_console/general/register.php b/pandora_console/general/register.php index b1d58aada4..e7097b994e 100644 --- a/pandora_console/general/register.php +++ b/pandora_console/general/register.php @@ -30,6 +30,7 @@ global $config; require_once $config['homedir'].'/include/functions_update_manager.php'; +require_once $config['homedir'].'/include/class/WelcomeWindow.class.php'; if (is_ajax()) { @@ -122,6 +123,8 @@ if (is_ajax()) { exit(); } + + ui_require_css_file('register'); $initial = isset($config['initial_wizard']) !== true @@ -170,6 +173,16 @@ if (!$config['disabled_newsletter']) { } } +$welcome = !$registration && !$show_newsletter && !$initial; +try { + $welcome_window = new WelcomeWindow($welcome); + if ($welcome_window !== null) { + $welcome_window->run(); + } +} catch (Exception $e) { + $welcome = false; +} + $newsletter = null; ?> diff --git a/pandora_console/general/subselect_data_module.php b/pandora_console/general/subselect_data_module.php index 416897ea15..fca56c692c 100644 --- a/pandora_console/general/subselect_data_module.php +++ b/pandora_console/general/subselect_data_module.php @@ -13,7 +13,8 @@ switch ($_GET['module']) { $sql = sprintf( 'SELECT id_tipo, descripcion FROM ttipo_modulo - WHERE categoria between 3 and 5 ' + WHERE categoria between 3 and 5 + OR categoria = 10 ' ); break; diff --git a/pandora_console/godmode/agentes/agent_manager.php b/pandora_console/godmode/agentes/agent_manager.php index d6b9448576..2516e0c5f8 100644 --- a/pandora_console/godmode/agentes/agent_manager.php +++ b/pandora_console/godmode/agentes/agent_manager.php @@ -275,7 +275,7 @@ if ($new_agent) { $table_alias = '

    '.__('Alias').': '.ui_print_help_tip(__('Characters /,\,|,%,#,&,$ will be ignored'), true).'

    '; $table_alias .= '
    '; -$table_alias .= '
    '.html_print_input_text('alias', $alias, '', 50, 100, true).'
    '; +$table_alias .= '
    '.html_print_input_text('alias', $alias, '', 50, 100, true, false, true).'
    '; if ($new_agent) { $table_alias .= '
    '.html_print_checkbox_switch('alias_as_name', 1, $config['alias_as_name'], true).__('Use alias as name').'
    '; } diff --git a/pandora_console/godmode/agentes/configurar_agente.php b/pandora_console/godmode/agentes/configurar_agente.php index 55116f940a..61d33193d3 100644 --- a/pandora_console/godmode/agentes/configurar_agente.php +++ b/pandora_console/godmode/agentes/configurar_agente.php @@ -1330,7 +1330,7 @@ if ($update_module || $create_module) { // Change double quotes by single. $snmp_oid = preg_replace('/"/', ''', $snmp_oid); - if (empty($snmp_oid)) { + if (empty($snmp_oid) === true) { // The user did not set any OID manually but did a SNMP walk. $snmp_oid = (string) get_parameter('select_snmp_oid'); } @@ -1339,18 +1339,30 @@ if ($update_module || $create_module) { // New support for snmp v3. $tcp_send = (string) get_parameter('snmp_version'); $plugin_user = (string) get_parameter('snmp3_auth_user'); - $plugin_pass = io_input_password((string) get_parameter('snmp3_auth_pass')); + $plugin_pass = io_input_password( + (string) get_parameter('snmp3_auth_pass') + ); $plugin_parameter = (string) get_parameter('snmp3_auth_method'); $custom_string_1 = (string) get_parameter('snmp3_privacy_method'); - $custom_string_2 = io_input_password((string) get_parameter('snmp3_privacy_pass')); + $custom_string_2 = io_input_password( + (string) get_parameter('snmp3_privacy_pass') + ); $custom_string_3 = (string) get_parameter('snmp3_security_level'); + } else if ($id_module_type >= 34 && $id_module_type <= 37) { + $tcp_send = (string) get_parameter('command_text'); + $custom_string_1 = (string) get_parameter( + 'command_credential_identifier' + ); + $custom_string_2 = (string) get_parameter('command_os'); } else { $plugin_user = (string) get_parameter('plugin_user'); if (get_parameter('id_module_component_type') == 7) { $plugin_pass = (int) get_parameter('plugin_pass'); } else { - $plugin_pass = io_input_password((string) get_parameter('plugin_pass')); + $plugin_pass = io_input_password( + (string) get_parameter('plugin_pass') + ); } $plugin_parameter = (string) get_parameter('plugin_parameter'); @@ -2266,6 +2278,10 @@ if ($updateGIS) { // ----------------------------------- // Load page depending on tab selected // ----------------------------------- +if ($_SESSION['create_module'] && $config['welcome_state'] == 1) { + $edit_module = true; +} + switch ($tab) { case 'main': include 'agent_manager.php'; diff --git a/pandora_console/godmode/agentes/modificar_agente.php b/pandora_console/godmode/agentes/modificar_agente.php index a383de35c4..3d2db9994a 100644 --- a/pandora_console/godmode/agentes/modificar_agente.php +++ b/pandora_console/godmode/agentes/modificar_agente.php @@ -14,7 +14,7 @@ // Load global vars check_login(); -// Take some parameters (GET) +// Take some parameters (GET). $offset = (int) get_parameter('offset'); $group_id = (int) get_parameter('group_id'); $ag_group = get_parameter('ag_group_refresh', -1); @@ -47,10 +47,10 @@ require_once 'include/functions_users.php'; $search = get_parameter('search', ''); -// Prepare the tab system to the future +// Prepare the tab system to the future. $tab = 'view'; -// Setup tab +// Setup tab. $viewtab['text'] = ''.html_print_image('images/operation.png', true, ['title' => __('View')]).''; $viewtab['operation'] = true; @@ -59,10 +59,10 @@ $viewtab['active'] = false; $onheader = ['view' => $viewtab]; -// Header +// Header. ui_print_page_header(__('Agents defined in %s', get_product_name()), 'images/agent_mc.png', false, '', true, $onheader); -// Perform actions +// Perform actions. $agent_to_delete = (int) get_parameter('borrar_agente'); $enable_agent = (int) get_parameter('enable_agent'); $disable_agent = (int) get_parameter('disable_agent'); @@ -99,7 +99,7 @@ if ($agent_to_delete) { ui_print_result_message($result, __('Success deleted agent.'), __('Could not be deleted.')); if (enterprise_installed()) { - // Check if the remote config file still exist + // Check if the remote config file still exist. if (isset($config['remote_config'])) { enterprise_include_once('include/functions_config_agents.php'); if (enterprise_hook('config_agents_has_remote_configuration', [$id_agente])) { @@ -114,7 +114,7 @@ if ($enable_agent) { $alias = agents_get_alias($enable_agent); if ($result) { - // Update the agent from the metaconsole cache + // Update the agent from the metaconsole cache. enterprise_include_once('include/functions_agents.php'); $values = ['disabled' => 0]; enterprise_hook('agent_update_from_cache', [$enable_agent, $values, $server_name]); @@ -136,7 +136,7 @@ if ($disable_agent) { $alias = agents_get_alias($disable_agent); if ($result) { - // Update the agent from the metaconsole cache + // Update the agent from the metaconsole cache. enterprise_include_once('include/functions_agents.php'); $values = ['disabled' => 1]; enterprise_hook('agent_update_from_cache', [$disable_agent, $values, $server_name]); @@ -223,6 +223,10 @@ switch ($config['dbtype']) { case 'oracle': $order_collation = ''; break; + + default: + // Default. + break; } $selected = true; @@ -252,6 +256,10 @@ switch ($sortField) { 'order' => 'DESC', ]; break; + + default: + // Default. + break; } break; @@ -274,6 +282,10 @@ switch ($sortField) { 'order' => 'DESC', ]; break; + + default: + // Default. + break; } break; @@ -296,6 +308,10 @@ switch ($sortField) { 'order' => 'DESC', ]; break; + + default: + // Default. + break; } break; @@ -318,6 +334,10 @@ switch ($sortField) { 'order' => 'DESC', ]; break; + + default: + // Default. + break; } break; @@ -378,7 +398,7 @@ if ($os != 0) { } $user_groups_to_sql = ''; -// Show only selected groups +// Show only selected groups. if ($ag_group > 0) { $ag_groups = []; $ag_groups = (array) $ag_group; @@ -388,7 +408,7 @@ if ($ag_group > 0) { $user_groups_to_sql = implode(',', $ag_groups); } else { - // Concatenate AW and AD permisions to get all the possible groups where the user can manage + // Concatenate AW and AD permisions to get all the possible groups where the user can manage. $user_groupsAW = users_get_groups($config['id_user'], 'AW'); $user_groupsAD = users_get_groups($config['id_user'], 'AD'); @@ -431,24 +451,25 @@ $sql = sprintf( $agents = db_get_all_rows_sql($sql); -// Delete rnum row generated by oracle_recode_query() function +// Delete rnum row generated by oracle_recode_query() function. if (($config['dbtype'] == 'oracle') && ($agents !== false)) { for ($i = 0; $i < count($agents); $i++) { unset($agents[$i]['rnum']); } } -// Prepare pagination +// Prepare pagination. ui_pagination($total_agents, "index.php?sec=gagente&sec2=godmode/agentes/modificar_agente&group_id=$ag_group&recursion=$recursion&search=$search&sort_field=$sortField&sort=$sort&disabled=$disabled&os=$os", $offset); if ($agents !== false) { // Urls to sort the table. - // Agent name size and description for Chinese and Japanese languages ​​are adjusted - $agent_font_size = '7'; - $description_font_size = '6.5'; - if ($config['language'] == 'ja' || $config['language'] == 'zh_CN' || $own_info['language'] == 'ja' || $own_info['language'] == 'zh_CN') { - $agent_font_size = '15'; - $description_font_size = '11'; + if ($config['language'] == 'ja' + || $config['language'] == 'zh_CN' + || $own_info['language'] == 'ja' + || $own_info['language'] == 'zh_CN' + ) { + // Adds a custom font size for Japanese and Chinese language. + $custom_font_size = 'custom_font_size'; } $url_up_agente = 'index.php?sec=gagente&sec2=godmode/agentes/modificar_agente&group_id='.$ag_group.'&recursion='.$recursion.'&search='.$search.'&os='.$os.'&offset='.$offset.'&sort_field=name&sort=up&disabled=$disabled'; @@ -476,21 +497,21 @@ if ($agents !== false) { $rowPair = true; $iterator = 0; foreach ($agents as $agent) { - // Begin Update tagente.remote 0/1 with remote agent function return + // Begin Update tagente.remote 0/1 with remote agent function return. if (enterprise_hook('config_agents_has_remote_configuration', [$agent['id_agente']])) { db_process_sql_update('tagente', ['remote' => 1], 'id_agente = '.$agent['id_agente'].''); } else { db_process_sql_update('tagente', ['remote' => 0], 'id_agente = '.$agent['id_agente'].''); } - // End Update tagente.remote 0/1 with remote agent function return + // End Update tagente.remote 0/1 with remote agent function return. $all_groups = agents_get_all_groups_agent($agent['id_agente'], $agent['id_grupo']); $check_aw = check_acl_one_of_groups($config['id_user'], $all_groups, 'AW'); $check_ad = check_acl_one_of_groups($config['id_user'], $all_groups, 'AD'); $cluster = db_get_row_sql('select id from tcluster where id_agent = '.$agent['id_agente']); - // Do not show the agent if there is not enough permissions + // Do not show the agent if there is not enough permissions. if (!$check_aw && !$check_ad) { continue; } @@ -512,7 +533,7 @@ if ($agents !== false) { $rowPair = !$rowPair; $iterator++; - // Agent name + // Agent name. echo ""; if ($agent['disabled']) { echo ''; @@ -537,7 +558,7 @@ if ($agents !== false) { } else { echo '".''.$agent['alias'].''.''; + id_agente=".$agent['id_agente']."'>".''.$agent['alias'].''.''; } echo ''; @@ -617,12 +638,12 @@ if ($agents !== false) { echo ''; - // Operating System icon + // Operating System icon. echo ""; ui_print_os_icon($agent['id_os'], false); echo ''; - // Type agent (Networt, Software or Satellite) + // Type agent (Networt, Software or Satellite). echo ""; echo ui_print_type_agent_icon( $agent['id_os'], @@ -634,10 +655,12 @@ if ($agents !== false) { echo ''; - // Group icon and name + // Group icon and name. echo "".ui_print_group_icon($agent['id_grupo'], true).''; - // Description - echo "".ui_print_truncate_text($agent['comentarios'], 'description', true, true, true, '[…]', 'font-size: '.$description_font_size.'pt;').''; + + // Description. + echo "".ui_print_truncate_text($agent['comentarios'], 'description', true, true, true, '[…]').''; + // Action // When there is only one element in page it's necesary go back page. if ((count($agents) == 1) && ($offset >= $config['block_size'])) { @@ -695,7 +718,7 @@ if ($agents !== false) { } if (check_acl($config['id_user'], 0, 'AW')) { - // Create agent button + // Create agent button. echo '
    '; echo '
    '; html_print_input_hidden('new_agent', 1); diff --git a/pandora_console/godmode/agentes/module_manager_editor.php b/pandora_console/godmode/agentes/module_manager_editor.php index 13c313892a..9428a362bc 100644 --- a/pandora_console/godmode/agentes/module_manager_editor.php +++ b/pandora_console/godmode/agentes/module_manager_editor.php @@ -1,16 +1,32 @@ = 15 + && $component['type'] <= 18 + ) { + // New support for snmp v3. + $component['snmp_version'] = $component['tcp_send']; + $component['snmp3_auth_user'] = io_safe_output( + $component['plugin_user'] + ); + // Must use io_output_password. + $component['snmp3_auth_pass'] = io_safe_output( + $component['plugin_pass'] + ); + $component['snmp3_auth_method'] = io_safe_output( + $component['plugin_parameter'] + ); + $component['snmp3_privacy_method'] = io_safe_output( + $component['custom_string_1'] + ); + $component['snmp3_privacy_pass'] = io_safe_output( + $component['custom_string_2'] + ); + $component['snmp3_security_level'] = io_safe_output( + $component['custom_string_3'] + ); + } else if ($component['type'] >= 34 + && $component['type'] <= 37 + ) { + $component['command_text'] = io_safe_output( + $component['tcp_send'] + ); + $component['command_credential_identifier'] = io_safe_output( + $component['custom_string_1'] + ); + $component['command_os'] = io_safe_output( + $component['custom_string_2'] + ); + } $component['str_warning'] = io_safe_output($component['str_warning']); $component['str_critical'] = io_safe_output($component['str_critical']); @@ -83,33 +146,29 @@ if (is_ajax()) { $component = db_get_row('tlocal_component', 'id', $id_component); foreach ($component as $index => $element) { - $component[$index] = html_entity_decode($element, ENT_QUOTES, 'UTF-8'); + $component[$index] = html_entity_decode( + $element, + ENT_QUOTES, + 'UTF-8' + ); } - $typeName = local_components_parse_module_extract_value('module_type', $component['data']); + $typeName = local_components_parse_module_extract_value( + 'module_type', + $component['data'] + ); - switch ($config['dbtype']) { - case 'mysql': - $component['type'] = db_get_value_sql( - ' - SELECT id_tipo - FROM ttipo_modulo - WHERE nombre LIKE "'.$typeName.'"' - ); - break; + $component['type'] = db_get_value_sql( + ' + SELECT id_tipo + FROM ttipo_modulo + WHERE nombre LIKE "'.$typeName.'"' + ); - case 'postgresql': - case 'oracle': - $component['type'] = db_get_value_sql( - ' - SELECT id_tipo - FROM ttipo_modulo - WHERE nombre LIKE \''.$typeName.'\'' - ); - break; - } - - $component['throw_unknown_events'] = !local_components_is_disable_type_event($id_component, EVENTS_GOING_UNKNOWN); + $component['throw_unknown_events'] = !local_components_is_disable_type_event( + $id_component, + EVENTS_GOING_UNKNOWN + ); echo io_json_mb_encode($component); return; @@ -136,7 +195,9 @@ if (is_ajax()) { $snmp3_auth_method = get_parameter('snmp3_auth_method'); $snmp3_auth_pass = io_safe_output(get_parameter('snmp3_auth_pass')); $snmp3_privacy_method = get_parameter('snmp3_privacy_method'); - $snmp3_privacy_pass = io_safe_output(get_parameter('snmp3_privacy_pass')); + $snmp3_privacy_pass = io_safe_output( + get_parameter('snmp3_privacy_pass') + ); $snmp_port = get_parameter('snmp_port'); $snmpwalk = get_snmpwalk( @@ -177,7 +238,7 @@ require_once 'include/functions_exportserver.php'; require_once $config['homedir'].'/include/functions_modules.php'; require_once $config['homedir'].'/include/functions_agents.php'; -// Reading a module +// Reading a module. if ($id_agent_module) { $module = modules_get_agentmodule($id_agent_module); $moduletype = $module['id_modulo']; @@ -202,19 +263,25 @@ if ($id_agent_module) { $snmp_community = $module['snmp_community']; $snmp_oid = $module['snmp_oid']; - // New support for snmp v3 + // New support for snmp v3. $snmp_version = $module['tcp_send']; $snmp3_auth_user = $module['plugin_user']; $snmp3_auth_pass = io_output_password($module['plugin_pass']); - // Auth method could be MD5 or SHA + // Auth method could be MD5 or SHA. $snmp3_auth_method = $module['plugin_parameter']; - // Privacy method could be DES or AES + // Privacy method could be DES or AES. $snmp3_privacy_method = $module['custom_string_1']; $snmp3_privacy_pass = io_output_password($module['custom_string_2']); - // Security level Could be noAuthNoPriv | authNoPriv | authPriv + // For Remote cmd fields are reused: + // tcp_send, custom_string_1, custom_string_2. + $command_text = $module['tcp_send']; + $command_credential_identifier = $module['custom_string_1']; + $command_os = $module['custom_string_2']; + + // Security level Could be noAuthNoPriv | authNoPriv | authPriv. $snmp3_security_level = $module['custom_string_3']; $ip_target = $module['ip_target']; @@ -265,39 +332,39 @@ if ($id_agent_module) { $id_category = $module['id_category']; $cron_interval = explode(' ', $module['cron_interval']); - if (isset($cron_interval[4])) { + if (isset($cron_interval[4]) === true) { $minute_from = $cron_interval[0]; $minute = explode('-', $minute_from); $minute_from = $minute[0]; - if (isset($minute[1])) { + if (isset($minute[1]) === true) { $minute_to = $minute[1]; } $hour_from = $cron_interval[1]; $h = explode('-', $hour_from); $hour_from = $h[0]; - if (isset($h[1])) { + if (isset($h[1]) === true) { $hour_to = $h[1]; } $mday_from = $cron_interval[2]; $md = explode('-', $mday_from); $mday_from = $md[0]; - if (isset($md[1])) { + if (isset($md[1]) === true) { $mday_to = $md[1]; } $month_from = $cron_interval[3]; $m = explode('-', $month_from); $month_from = $m[0]; - if (isset($m[1])) { + if (isset($m[1]) === true) { $month_to = $m[1]; } $wday_from = $cron_interval[4]; $wd = explode('-', $wday_from); $wday_from = $wd[0]; - if (isset($wd[1])) { + if (isset($wd[1]) === true) { $wday_to = $wd[1]; } } else { @@ -315,14 +382,20 @@ if ($id_agent_module) { } $module_macros = null; - if (isset($module['module_macros'])) { - $module_macros = json_decode(base64_decode($module['module_macros']), true); + if (isset($module['module_macros']) === true) { + $module_macros = json_decode( + base64_decode($module['module_macros']), + true + ); } } else { - if (!isset($moduletype)) { + if (isset($moduletype) === false) { $moduletype = (string) get_parameter('moduletype'); + if ($_SESSION['create_module'] && $config['welcome_state'] == 1) { + $moduletype = 'networkserver'; + } - // Clean up specific network modules fields + // Clean up specific network modules fields. $name = ''; $description = ''; $id_module_group = 1; @@ -374,7 +447,7 @@ if ($id_agent_module) { $str_critical = ''; $ff_event = 0; - // New support for snmp v3 + // New support for snmp v3. $snmp_version = 1; $snmp3_auth_user = ''; $snmp3_auth_pass = ''; @@ -383,6 +456,11 @@ if ($id_agent_module) { $snmp3_privacy_pass = ''; $snmp3_security_level = ''; + // For Remote CMD. + $command_text = ''; + $command_credential_identifier = ''; + $command_os = ''; + $critical_instructions = ''; $warning_instructions = ''; $unknown_instructions = ''; @@ -418,7 +496,9 @@ if ($id_agent_module) { } } -$is_function_policies = enterprise_include_once('include/functions_policies.php'); +$is_function_policies = enterprise_include_once( + 'include/functions_policies.php' +); if ($is_function_policies !== ENTERPRISE_NOT_HOOK) { $relink_policy = get_parameter('relink_policy', 0); @@ -428,19 +508,32 @@ if ($is_function_policies !== ENTERPRISE_NOT_HOOK) { $policy_info = policies_info_module_policy($id_agent_module); $policy_id = $policy_info['id_policy']; - if ($relink_policy && policies_get_policy_queue_status($policy_id) == STATUS_IN_QUEUE_APPLYING) { - ui_print_error_message(__('This policy is applying and cannot be modified')); + if ($relink_policy + && policies_get_policy_queue_status($policy_id) == STATUS_IN_QUEUE_APPLYING + ) { + ui_print_error_message( + __('This policy is applying and cannot be modified') + ); } else { $result = policies_relink_module($id_agent_module); - ui_print_result_message($result, __('Module will be linked in the next application')); + ui_print_result_message( + $result, + __('Module will be linked in the next application') + ); - db_pandora_audit('Agent management', 'Re-link module '.$id_agent_module); + db_pandora_audit( + 'Agent management', + 'Re-link module '.$id_agent_module + ); } } if ($unlink_policy) { $result = policies_unlink_module($id_agent_module); - ui_print_result_message($result, __('Module will be unlinked in the next application')); + ui_print_result_message( + $result, + __('Module will be unlinked in the next application') + ); db_pandora_audit('Agent management', 'Unlink module '.$id_agent_module); } @@ -452,7 +545,7 @@ $remote_conf = false; if ($__code_from !== 'policies') { // Only check in the module editor. - // Check ACL tags + // Check ACL tags. $tag_acl = true; // If edit a existing module. @@ -479,12 +572,12 @@ switch ($moduletype) { $remote_conf = false; if (enterprise_installed()) { enterprise_include_once('include/functions_config_agents.php'); - $remote_conf = enterprise_hook('config_agents_has_remote_configuration', [$id_agente]); + $remote_conf = enterprise_hook( + 'config_agents_has_remote_configuration', + [$id_agente] + ); } - /* - Categories is an array containing the allowed module types - (generic_data, generic_string, etc) from ttipo_modulo (field categoria) */ $categories = [ 0, 1, @@ -503,12 +596,16 @@ switch ($moduletype) { 'config_agents_get_module_from_conf', [ $id_agente, - io_safe_output(modules_get_agentmodule_name($id_agent_module)), + io_safe_output( + modules_get_agentmodule_name($id_agent_module) + ), ] ); } - enterprise_include('godmode/agentes/module_manager_editor_data.php'); + enterprise_include( + 'godmode/agentes/module_manager_editor_data.php' + ); } break; @@ -520,6 +617,10 @@ switch ($moduletype) { 4, 5, ]; + if (enterprise_installed()) { + $categories[] = 10; + } + include 'module_manager_editor_common.php'; include 'module_manager_editor_network.php'; break; @@ -562,9 +663,12 @@ switch ($moduletype) { include 'module_manager_editor_wmi.php'; break; - // WARNING: type 7 is reserved on enterprise + // WARNING: type 7 is reserved on enterprise. default: - if (enterprise_include('godmode/agentes/module_manager_editor.php') === ENTERPRISE_NOT_HOOK) { + if (enterprise_include( + 'godmode/agentes/module_manager_editor.php' + ) === ENTERPRISE_NOT_HOOK + ) { ui_print_error_message(sprintf(__('Invalid module type'))); return; } @@ -580,7 +684,7 @@ if ($config['enterprise_installed'] && $id_agent_module) { echo ''; -// TODO: Change to the ui_print_error system +// TODO: Change to the ui_print_error system. echo ''; ui_toggle( @@ -602,12 +706,18 @@ ui_toggle( if ($moduletype != 13) { ui_toggle( - html_print_table($table_new_relations, true).html_print_table($table_relations, true), + html_print_table( + $table_new_relations, + true + ).html_print_table( + $table_relations, + true + ), __('Module relations') ); } -// Submit +// Submit. echo '
    '; if ($id_agent_module) { html_print_submit_button( @@ -659,38 +769,84 @@ ui_require_javascript_file('pandora_modules'); diff --git a/pandora_console/godmode/agentes/module_manager_editor_common.php b/pandora_console/godmode/agentes/module_manager_editor_common.php index 5a4653fc29..08f930c95f 100644 --- a/pandora_console/godmode/agentes/module_manager_editor_common.php +++ b/pandora_console/godmode/agentes/module_manager_editor_common.php @@ -132,7 +132,7 @@ function add_component_selection($id_network_component_type) require_once 'include/functions_network_components.php'; enterprise_include_once('include/functions_policies.php'); -// If code comes from policies disable export select +// If code comes from policies disable export select. global $__code_from; $disabledBecauseInPolicy = false; @@ -209,8 +209,7 @@ $table_simple->data[0][1] = html_print_input_text_extended( $largeClassDisabledBecauseInPolicy, true ); -// $table_simple->data[0][1] = html_print_input_text ('name', -// io_safe_output($name), '', 45, 100, true, $disabledBecauseInPolicy); + if (!empty($id_agent_module) && isset($id_agente)) { $table_simple->data[0][1] .= ' '.__('ID').'  '.$id_agent_module.' '; @@ -237,7 +236,13 @@ if ($policy_link != 0) { } $table_simple->data[0][2] = __('Disabled'); -$table_simple->data[0][2] .= html_print_checkbox('disabled', 1, $disabled, true, $disabled_enable); +$table_simple->data[0][2] .= html_print_checkbox( + 'disabled', + 1, + $disabled, + true, + $disabled_enable +); $table_simple->data[0][3] = __('Module group'); $table_simple->data[0][3] .= html_print_select_from_sql( 'SELECT id_mg, name FROM tmodule_group ORDER BY name', @@ -260,12 +265,18 @@ if ((isset($id_agent_module) && $id_agent_module) || $id_policy_module != 0) { $in_policy = strstr($page, 'policy_modules'); if (!$in_policy) { - // Cannot select the current module to be itself parent - $module_parent_filter = $id_agent_module ? ['tagente_modulo.id_agente_modulo' => "<>$id_agent_module"] : ''; + // Cannot select the current module to be itself parent. + $module_parent_filter = ($id_agent_module) ? ['tagente_modulo.id_agente_modulo' => "<>$id_agent_module"] : ''; $table_simple->data[1][0] = __('Module parent'); - $modules_can_be_parent = agents_get_modules($id_agente, false, $module_parent_filter); - // If the user cannot have access to parent module, only print the name - if ($parent_module_id != 0 && !in_array($parent_module_id, array_keys($modules_can_be_parent))) { + $modules_can_be_parent = agents_get_modules( + $id_agente, + false, + $module_parent_filter + ); + // If the user cannot have access to parent module, only print the name. + if ($parent_module_id != 0 + && !in_array($parent_module_id, array_keys($modules_can_be_parent)) + ) { $table_simple->data[1][1] = db_get_value( 'nombre', 'tagente_modulo', @@ -305,7 +316,11 @@ if (!$edit) { } $table_simple->data[2][1] = ''.modules_get_moduletype_description($id_module_type).' ('.$type_names_hash[$id_module_type].')'; - $table_simple->data[2][1] .= html_print_input_hidden('type_names', base64_encode(io_json_mb_encode($type_names_hash)), true); + $table_simple->data[2][1] .= html_print_input_hidden( + 'type_names', + base64_encode(io_json_mb_encode($type_names_hash)), + true + ); } else { if (isset($id_module_type)) { $idModuleType = $id_module_type; @@ -313,12 +328,13 @@ if (!$edit) { $idModuleType = ''; } - // Removed web analysis and log4x from select + // Removed web analysis and log4x from select. $sql = sprintf( - 'SELECT id_tipo, descripcion, nombre + 'SELECT id_tipo, descripcion, nombre, categoria FROM ttipo_modulo - WHERE categoria IN (%s) AND id_tipo NOT IN (24, 25) - ORDER BY descripcion', + WHERE categoria IN (%s) + AND id_tipo NOT IN (24, 25) + ORDER BY id_tipo ASC', implode(',', $categories) ); @@ -326,7 +342,9 @@ if (!$edit) { $type_names_hash = []; $type_description_hash = []; - if (isset($type_names) && is_array($type_names)) { + if (isset($type_names) === true + && is_array($type_names) === true + ) { foreach ($type_names as $tn) { $type_names_hash[$tn['id_tipo']] = $tn['nombre']; $type_description_hash[$tn['id_tipo']] = $tn['descripcion']; @@ -342,7 +360,7 @@ if (!$edit) { 0, true, false, - true, + false, '', false, false, @@ -350,8 +368,12 @@ if (!$edit) { 100 ); - // Store the relation between id and name of the types on a hidden field - $table_simple->data[2][1] .= html_print_input_hidden('type_names', base64_encode(io_json_mb_encode($type_names_hash)), true); + // Store the relation between id and name of the types on a hidden field. + $table_simple->data[2][1] .= html_print_input_hidden( + 'type_names', + base64_encode(io_json_mb_encode($type_names_hash)), + true + ); } if ($edit_module) { @@ -380,15 +402,32 @@ if ($edit_module) { $help_header = 'webserver_module_tab'; } - $table_simple->data[2][0] = __('Type').' '.ui_print_help_icon($help_header, true); + $table_simple->data[2][0] = __('Type').' '; + $table_simple->data[2][0] .= ui_print_help_icon($help_header, true); } if ($disabledBecauseInPolicy) { - $table_simple->data[2][3] .= html_print_input_hidden('id_module_group', $id_module_group, true); + $table_simple->data[2][3] .= html_print_input_hidden( + 'id_module_group', + $id_module_group, + true + ); } $table_simple->data[3][0] = __('Dynamic Threshold Interval'); -$table_simple->data[3][1] = html_print_extended_select_for_time('dynamic_interval', $dynamic_interval, '', 'None', '0', 10, true, 'width:150px', false, $classdisabledBecauseInPolicy, $disabledBecauseInPolicy); +$table_simple->data[3][1] = html_print_extended_select_for_time( + 'dynamic_interval', + $dynamic_interval, + '', + 'None', + '0', + 10, + true, + 'width:150px', + false, + $classdisabledBecauseInPolicy, + $disabledBecauseInPolicy +); $table_simple->data[3][1] .= ''.html_print_image('images/cog.png', true, ['title' => __('Advanced options Dynamic Threshold')]).''; if ($in_policy) { $table_simple->cellclass[2][2] = 'hide_dinamic'; diff --git a/pandora_console/godmode/agentes/module_manager_editor_network.php b/pandora_console/godmode/agentes/module_manager_editor_network.php index c0a6181a8e..a5763e101a 100644 --- a/pandora_console/godmode/agentes/module_manager_editor_network.php +++ b/pandora_console/godmode/agentes/module_manager_editor_network.php @@ -1,30 +1,50 @@ "; -// This line does not run with the dinamic loader editor in policies. -// ui_require_javascript_file ('pandora_snmp_browser'); -// WARNING REPEAT input hidden errors in console -// Save some variables for javascript functions -// html_print_input_hidden ('ajax_url', ui_get_full_url("ajax.php"), false); -// html_print_input_hidden ('search_matches_translation', __("Search matches"), false); -// Define a custom action to save the OID selected in the SNMP browser to the form -html_print_input_hidden('custom_action', urlencode(base64_encode(' ')), false); +echo ""; + +// Define a custom action to save the OID selected +// in the SNMP browser to the form. +html_print_input_hidden( + 'custom_action', + urlencode( + base64_encode( + ' ' + ) + ), + false +); $isFunctionPolicies = enterprise_include_once('include/functions_policies.php'); @@ -50,17 +70,15 @@ if (strstr($page, 'policy_modules') === false) { define('ID_NETWORK_COMPONENT_TYPE', 2); if (empty($update_module_id)) { - // Function in module_manager_editor_common.php + // Function in module_manager_editor_common.php. add_component_selection(ID_NETWORK_COMPONENT_TYPE); -} else { - // TODO: Print network component if available } $extra_title = __('Network server module'); $data = []; $data[0] = __('Target IP'); -// show agent_for defect; +// Show agent_for defect. if ($page == 'enterprise/godmode/policies/policy_modules') { if ($ip_target != 'auto' && $ip_target != '') { $custom_ip_target = $ip_target; @@ -100,7 +118,7 @@ if ($page == 'enterprise/godmode/policies/policy_modules') { $data[1] = html_print_input_text('ip_target', $ip_target, '', 15, 60, true); } -// In ICMP modules, port is not configurable +// In ICMP modules, port is not configurable. if ($id_module_type >= 6 && $id_module_type <= 7) { $data[2] = ''; $data[3] = ''; @@ -148,7 +166,15 @@ if (!$adopt) { $classdisabledBecauseInPolicy ); } else { - $data[1] = html_print_input_text('snmp_community', $snmp_community, '', 15, 60, true, false); + $data[1] = html_print_input_text( + 'snmp_community', + $snmp_community, + '', + 15, + 60, + true, + false + ); } $data[2] = _('SNMP version'); @@ -213,8 +239,27 @@ $data[1] .= html_print_input_text( $classdisabledBecauseInPolicy ); $data[1] .= ''; $data[1] .= ''; $data[1] .= html_print_button( @@ -231,42 +276,50 @@ $table_simple->colspan['snmp_2'][1] = 3; push_table_simple($data, 'snmp_2'); -// Advanced stuff +// Advanced stuff. $data = []; $data[0] = __('TCP send'); -$data[1] = html_print_textarea('tcp_send', 2, 65, $tcp_send, $disabledTextBecauseInPolicy, true, $largeclassdisabledBecauseInPolicy); +$data[1] = html_print_textarea( + 'tcp_send', + 2, + 65, + $tcp_send, + $disabledTextBecauseInPolicy, + true, + $largeclassdisabledBecauseInPolicy +); $table_simple->colspan['tcp_send'][1] = 3; push_table_simple($data, 'tcp_send'); $data[0] = __('TCP receive'); -$data[1] = html_print_textarea('tcp_rcv', 2, 65, $tcp_rcv, $disabledTextBecauseInPolicy, true, $largeclassdisabledBecauseInPolicy); +$data[1] = html_print_textarea( + 'tcp_rcv', + 2, + 65, + $tcp_rcv, + $disabledTextBecauseInPolicy, + true, + $largeclassdisabledBecauseInPolicy +); $table_simple->colspan['tcp_receive'][1] = 3; push_table_simple($data, 'tcp_receive'); if ($id_module_type < 8 || $id_module_type > 11) { - // NOT TCP + // NOT TCP. $table_simple->rowstyle['tcp_send'] = 'display: none;'; $table_simple->rowstyle['tcp_receive'] = 'display: none;'; } if ($id_module_type < 15 || $id_module_type > 18) { - // NOT SNMP + // NOT SNMP. $table_simple->rowstyle['snmp_1'] = 'display: none'; $table_simple->rowstyle['snmp_2'] = 'display: none'; } -// For a policy -if (!isset($id_agent_module)) { - $snmp3_auth_user = ''; - $snmp3_auth_pass = ''; - $snmp_version = 1; - $snmp3_privacy_method = ''; - $snmp3_privacy_pass = ''; - $snmp3_auth_method = ''; - $snmp3_security_level = ''; -} else if ($id_agent_module === false) { +// For a policy. +if (isset($id_agent_module) === false || $id_agent_module === false) { $snmp3_auth_user = ''; $snmp3_auth_pass = ''; $snmp_version = 1; @@ -274,6 +327,9 @@ if (!isset($id_agent_module)) { $snmp3_privacy_pass = ''; $snmp3_auth_method = ''; $snmp3_security_level = ''; + $command_text = ''; + $command_os = 'inherited'; + $command_credential_identifier = ''; } $data = []; @@ -333,7 +389,22 @@ push_table_simple($data, 'field_snmpv3_row2'); $data = []; $data[0] = __('Auth method'); -$data[1] = html_print_select(['MD5' => __('MD5'), 'SHA' => __('SHA')], 'snmp3_auth_method', $snmp3_auth_method, '', '', '', true, false, false, '', $disabledBecauseInPolicy); +$data[1] = html_print_select( + [ + 'MD5' => __('MD5'), + 'SHA' => __('SHA'), + ], + 'snmp3_auth_method', + $snmp3_auth_method, + '', + '', + '', + true, + false, + false, + '', + $disabledBecauseInPolicy +); $data[2] = __('Security level'); $data[3] = html_print_select( [ @@ -358,13 +429,84 @@ if ($snmp_version != 3) { push_table_simple($data, 'field_snmpv3_row3'); +$data = []; +$data[0] = __('Command'); +$data[1] = html_print_input_text_extended( + 'command_text', + $command_text, + 'command_text', + '', + 100, + 10000, + $disabledBecauseInPolicy, + '', + $largeClassDisabledBecauseInPolicy, + true +); +$table_simple->colspan['row-cmd-row-1'][1] = 3; +push_table_simple($data, 'row-cmd-row-1'); + +require_once $config['homedir'].'/include/class/CredentialStore.class.php'; +$array_credential_identifier = CredentialStore::getKeys('CUSTOM'); + +$data[0] = __('Credential identifier'); +$data[1] = html_print_select( + $array_credential_identifier, + 'command_credential_identifier', + $command_credential_identifier, + '', + __('None'), + '', + true, + false, + false, + '', + $disabledBecauseInPolicy +); + +$array_os = [ + 'inherited' => __('Inherited'), + 'linux' => __('Linux'), + 'windows' => __('Windows'), +]; + +$data[2] = __('Target OS'); +$data[3] = html_print_select( + $array_os, + 'command_os', + $command_os, + '', + '', + '', + true, + false, + false, + '', + $disabledBecauseInPolicy +); + +push_table_simple($data, 'row-cmd-row-2'); + +if ($id_module_type !== 34 + && $id_module_type !== 35 + && $id_module_type !== 36 + && $id_module_type !== 37 +) { + $table_simple->rowstyle['row-cmd-row-1'] = 'display: none;'; + $table_simple->rowstyle['row-cmd-row-2'] = 'display: none;'; +} + snmp_browser_print_container(false, '100%', '60%', 'none'); ?> diff --git a/pandora_console/godmode/modules/manage_network_components_form.php b/pandora_console/godmode/modules/manage_network_components_form.php index fd922046d1..1ee435f57a 100644 --- a/pandora_console/godmode/modules/manage_network_components_form.php +++ b/pandora_console/godmode/modules/manage_network_components_form.php @@ -1,17 +1,32 @@ $id_agentmodule]); + $data_module = db_get_row_filter( + 'tagente_modulo', + ['id_agente_modulo' => $id_agentmodule] + ); $name = $data_module['nombre']; $description = $data_module['descripcion']; @@ -139,16 +160,25 @@ if (isset($id)) { $each_ff = $component['each_ff']; if ($type >= 15 && $type <= 18) { - // New support for snmp v3 + // New support for snmp v3. $snmp_version = $component['tcp_send']; $snmp3_auth_user = $component['plugin_user']; $snmp3_auth_pass = io_output_password($component['plugin_pass']); $snmp3_auth_method = $component['plugin_parameter']; $snmp3_privacy_method = $component['custom_string_1']; - $snmp3_privacy_pass = io_output_password($component['custom_string_2']); + $snmp3_privacy_pass = io_output_password( + $component['custom_string_2'] + ); $snmp3_security_level = $component['custom_string_3']; + } else if ($type >= 34 && $type <= 37) { + $command_text = $component['tcp_send']; + $command_credential_identifier = $component['custom_string_1']; + $command_os = $component['custom_string_2']; } - } else if (isset($new_component) && $new_component && !$create_network_from_snmp_browser) { + } else if (isset($new_component) + && $new_component + && !$create_network_from_snmp_browser + ) { $name = ''; $snmp_oid = ''; $description = ''; @@ -204,21 +234,13 @@ if (isset($id)) { $snmp3_privacy_pass = ''; $snmp3_auth_method = ''; $snmp3_security_level = ''; + + $command_text = ''; + $command_os = 'inherited'; + $command_credential_identifier = ''; } } -if ($create_network_from_snmp_browser) { -} - -/* - * $id_component_type has these values: - * 6 - Module WMI - * 4 - Plugin component - * 2 - network component - * - * You can see this values in file godmode/modules/manage_network_components.php - * in the last lines (in the call function "html_print_select"). - */ $table = new stdClass(); if ($id_component_type == 6) { @@ -243,6 +265,10 @@ if ($id_component_type == 6) { 4, 5, ]; + if (enterprise_installed()) { + $categories[] = 10; + } + include $config['homedir'].'/godmode/modules/manage_network_components_form_common.php'; include $config['homedir'].'/godmode/modules/manage_network_components_form_network.php'; } else { @@ -253,7 +279,7 @@ echo ''; $table->width = '100%'; $table->class = 'databox filters'; -// $table came from manage_network_components_form_common.php + if (defined('METACONSOLE')) { if ($id) { $table->head[0] = __('Update Network Component'); @@ -295,61 +321,78 @@ ui_require_javascript_file('pandora_modules'); function type_change () { // type 1-4 - Generic_xxxxxx if ((document.component.type.value > 0) && (document.component.type.value < 5)) { - - $("input[name=snmp_community]").css({backgroundColor: '#ddd !important'}); + $("input[name=snmp_community]") + .css({backgroundColor: '#ddd '}); $("input[name=snmp_community]").attr("disabled", true); - - $("input[name=tcp_rcv]").css({backgroundColor: '#ddd !important'}); + + $("input[name=tcp_rcv]").css({backgroundColor: '#ddd '}); $("input[name=tcp_rcv]").attr("disabled", true); - + - $("input[name=snmp_oid]").css({backgroundColor: '#ddd !important'}); + $("input[name=snmp_oid]") + .css({backgroundColor: '#ddd '}); $("input[name=snmp_oid]").attr("disabled", true); - - $("input[name=tcp_send]").css({backgroundColor: '#ddd !important'}); + + $("input[name=tcp_send]") + .css({backgroundColor: '#ddd '}); $("input[name=tcp_send]").attr("disabled", true); - - $("input[name=tcp_port]").css({backgroundColor: '#ddd !important'}); + + $("input[name=tcp_port]") + .css({backgroundColor: '#ddd '}); $("input[name=tcp_port]").attr("disabled", true); - - $("input[name=snmp3_auth_user]").css({backgroundColor: '#ddd !important'}); + + $("input[name=snmp3_auth_user]") + .css({backgroundColor: '#ddd '}); $("input[name=snmp3_auth_user]").attr("disabled", true); - - $("input[name=snmp3_auth_pass]").css({backgroundColor: '#ddd !important'}); + + $("input[name=snmp3_auth_pass]") + .css({backgroundColor: '#ddd '}); $("input[name=snmp3_auth_pass]").attr("disabled", true); - - $("#snmp3_privacy_method").css({backgroundColor: '#ddd !important'}); + + $("#snmp3_privacy_method").css({backgroundColor: '#ddd '}); $("#snmp3_privacy_method").attr("disabled", true); - - $("input[name=snmp3_privacy_pass]").css({backgroundColor: '#ddd !important'}); + + $("input[name=snmp3_privacy_pass]") + .css({backgroundColor: '#ddd '}); $("input[name=snmp3_privacy_pass]").attr("disabled", true); - - $("#snmp3_auth_method").css({backgroundColor: '#ddd !important'}); + + $("#snmp3_auth_method").css({backgroundColor: '#ddd '}); $("#snmp3_auth_method").attr("disabled", true); - - $("#snmp3_security_level").css({backgroundColor: '#ddd !important'}); + + $("#snmp3_security_level").css({backgroundColor: '#ddd '}); $("#snmp3_security_level").attr("disabled", true); + + $("#command_text").css({backgroundColor: '#ddd '}); + $("#command_text").attr("disabled", true); + + $("#command_credential_identifier") + .css({backgroundColor: '#ddd '}); + $("#command_credential_identifier").attr("disabled", true); + + $("#command_os").css({backgroundColor: '#ddd '}); + $("#command_os").attr("disabled", true); } // type 15-18- SNMP - if ((document.component.type.value > 14) && (document.component.type.value < 19 )) { - document.component.snmp_oid.style.background="#fff"; - document.component.snmp_oid.style.disabled=false; - document.component.snmp_community.style.background="#fff"; - document.component.snmp_community.disabled=false; + if ((document.component.type.value > 14) && (document.component.type.value < 19 )) { document.component.snmp_oid.style.background="#fff"; document.component.snmp_oid.disabled=false; - document.component.tcp_send.style.background="#ddd !important"; + + document.getElementById('text-snmp_community').style.background="#fff"; + document.getElementById('text-snmp_community').disabled=false; + document.component.snmp_oid.style.background="#fff"; + document.component.snmp_oid.disabled=false; + document.component.tcp_send.style.background="#ddd "; document.component.tcp_send.disabled=true; - document.component.tcp_rcv.style.background="#ddd !important"; + document.component.tcp_rcv.style.background="#ddd "; document.component.tcp_rcv.disabled=true; document.component.tcp_port.style.background="#fff"; document.component.tcp_port.disabled=false; - + document.component.snmp_version.style.background="#fff"; document.component.snmp_version.disabled=false; document.component.snmp3_auth_user.style.background="#fff"; @@ -364,94 +407,161 @@ function type_change () { document.component.snmp3_auth_method.disabled=false; document.component.snmp3_security_level.style.background="#fff"; document.component.snmp3_security_level.disabled=false; - + + document.component.command_text.style.background="#ddd"; + document.component.command_text.style.disabled=true; + document.component.command_credential_identifier.style.background="#ddd"; + document.component.command_credential_identifier.disabled=true; + document.component.command_os.style.background="#ddd"; + document.component.command_os.disabled=true; + $("#snmp_version" ).trigger("change"); } + + if ((document.component.type.value >= 34) && (document.component.type.value <= 37 )) { + document.component.snmp_oid.style.background="#ddd"; + document.component.snmp_oid.disabled=true; + document.getElementById('text-snmp_community').style.background="#ddd"; + document.getElementById('text-snmp_community').disabled=true; + document.component.snmp_oid.style.background="#ddd"; + document.component.snmp_oid.disabled=true; + document.component.snmp_version.style.background="#ddd"; + document.component.snmp_version.disabled=true; + + document.component.tcp_send.style.background="#ddd"; + document.component.tcp_send.disabled=true; + document.component.tcp_rcv.style.background="#ddd"; + document.component.tcp_rcv.disabled=true; + document.component.tcp_port.style.background="#fff"; + document.component.tcp_port.disabled=false; + + document.component.snmp3_auth_user.style.background="#ddd "; + document.component.snmp3_auth_user.disabled=true; + document.component.snmp3_auth_pass.background="#ddd "; + document.component.snmp3_auth_pass.disabled=true; + document.component.snmp3_privacy_method.style.background="#ddd "; + document.component.snmp3_privacy_method.disabled=true; + document.component.snmp3_privacy_pass.style.background="#ddd "; + document.component.snmp3_privacy_pass.disabled=true; + document.component.snmp3_auth_method.style.background="#ddd "; + document.component.snmp3_auth_method.disabled=true; + document.component.snmp3_security_level.style.background="#ddd "; + document.component.snmp3_security_level.disabled=true; + + document.component.command_text.style.background="#fff"; + document.component.command_text.style.disabled=false; + document.component.command_credential_identifier.style.background="#fff"; + document.component.command_credential_identifier.disabled=false; + document.component.command_os.style.background="#fff"; + document.component.command_os.disabled=false; + } + // type 6-7 - ICMP if ((document.component.type.value == 6) || (document.component.type.value == 7)) { - document.component.snmp_oid.style.background="#ddd !important"; + document.component.snmp_oid.style.background="#ddd "; document.component.snmp_oid.disabled=true; - document.component.snmp_community.style.background="#ddd !important"; - document.component.snmp_community.disabled=true; - document.component.snmp_oid.style.background="#ddd !important"; + document.getElementById('text-snmp_community').style.background="#ddd"; + document.getElementById('text-snmp_community').disabled=true; + document.component.snmp_oid.style.background="#ddd "; document.component.snmp_oid.disabled=true; - document.component.tcp_send.style.background="#ddd !important"; + document.component.tcp_send.style.background="#ddd "; document.component.tcp_send.disabled=true; - document.component.tcp_rcv.style.background="#ddd !important"; + document.component.tcp_rcv.style.background="#ddd "; document.component.tcp_rcv.disabled=true; - document.component.tcp_port.style.background="#ddd !important"; + document.component.tcp_port.style.background="#ddd "; document.component.tcp_port.disabled=true; - - document.component.snmp_version.style.background="#ddd !important"; + + document.component.snmp_version.style.background="#ddd "; document.component.snmp_version.disabled=true; - document.component.snmp3_auth_user.style.background="#ddd !important"; + document.component.snmp3_auth_user.style.background="#ddd "; document.component.snmp3_auth_user.disabled=true; - document.component.snmp3_auth_pass.background="#ddd !important"; + document.component.snmp3_auth_pass.background="#ddd "; document.component.snmp3_auth_pass.disabled=true; - document.component.snmp3_privacy_method.style.background="#ddd !important"; + document.component.snmp3_privacy_method.style.background="#ddd "; document.component.snmp3_privacy_method.disabled=true; - document.component.snmp3_privacy_pass.style.background="#ddd !important"; + document.component.snmp3_privacy_pass.style.background="#ddd "; document.component.snmp3_privacy_pass.disabled=true; - document.component.snmp3_auth_method.style.background="#ddd !important"; + document.component.snmp3_auth_method.style.background="#ddd "; document.component.snmp3_auth_method.disabled=true; - document.component.snmp3_security_level.style.background="#ddd !important"; + document.component.snmp3_security_level.style.background="#ddd "; document.component.snmp3_security_level.disabled=true; + + document.component.command_text.style.background="#ddd"; + document.component.command_text.style.disabled=true; + document.component.command_credential_identifier.style.background="#ddd"; + document.component.command_credential_identifier.disabled=true; + document.component.command_os.style.background="#ddd"; + document.component.command_os.disabled=true; } // type 8-11 - TCP if ((document.component.type.value > 7) && (document.component.type.value < 12)) { - document.component.snmp_oid.style.background="#ddd !important"; + document.component.snmp_oid.style.background="#ddd "; document.component.snmp_oid.disabled=true; - document.component.snmp_community.style.background="#ddd !important"; - document.component.snmp_community.disabled=true; + document.getElementById('text-snmp_community').style.background="#ddd "; + document.getElementById('text-snmp_community').disabled=true; document.component.tcp_send.style.background="#fff"; document.component.tcp_send.disabled=false; document.component.tcp_rcv.style.background="#fff"; document.component.tcp_rcv.disabled=false; document.component.tcp_port.style.background="#fff"; document.component.tcp_port.disabled=false; - - document.component.snmp_version.style.background="#ddd !important"; + + document.component.snmp_version.style.background="#ddd "; document.component.snmp_version.disabled=true; - document.component.snmp3_auth_user.style.background="#ddd !important"; + document.component.snmp3_auth_user.style.background="#ddd "; document.component.snmp3_auth_user.disabled=true; - document.component.snmp3_auth_pass.background="#ddd !important"; + document.component.snmp3_auth_pass.background="#ddd "; document.component.snmp3_auth_pass.disabled=true; - document.component.snmp3_privacy_method.style.background="#ddd !important"; + document.component.snmp3_privacy_method.style.background="#ddd "; document.component.snmp3_privacy_method.disabled=true; - document.component.snmp3_privacy_pass.style.background="#ddd !important"; + document.component.snmp3_privacy_pass.style.background="#ddd "; document.component.snmp3_privacy_pass.disabled=true; - document.component.snmp3_auth_method.style.background="#ddd !important"; + document.component.snmp3_auth_method.style.background="#ddd "; document.component.snmp3_auth_method.disabled=true; - document.component.snmp3_security_level.style.background="#ddd !important"; + document.component.snmp3_security_level.style.background="#ddd "; document.component.snmp3_security_level.disabled=true; + + document.component.command_text.style.background="#ddd"; + document.component.command_text.style.disabled=true; + document.component.command_credential_identifier.style.background="#ddd"; + document.component.command_credential_identifier.disabled=true; + document.component.command_os.style.background="#ddd"; + document.component.command_os.disabled=true; } // type 12 - UDP if (document.component.type.value == 12) { - document.component.snmp_oid.style.background="#ddd !important"; + document.component.snmp_oid.style.background="#ddd "; document.component.snmp_oid.disabled=true; - document.component.snmp_community.style.background="#ddd !important"; - document.component.snmp_community.disabled=true; + document.getElementById('text-snmp_community').style.background="#ddd "; + document.getElementById('text-snmp_community').disabled=true; document.component.tcp_send.style.background="#fff"; document.component.tcp_send.disabled=false; document.component.tcp_rcv.style.background="#fff"; document.component.tcp_rcv.disabled=false; document.component.tcp_port.style.background="#fff"; document.component.tcp_port.disabled=false; - - document.component.snmp_version.style.background="#ddd !important"; + + document.component.snmp_version.style.background="#ddd "; document.component.snmp_version.disabled=true; - document.component.snmp3_auth_user.style.background="#ddd !important"; + document.component.snmp3_auth_user.style.background="#ddd "; document.component.snmp3_auth_user.disabled=true; - document.component.snmp3_auth_pass.background="#ddd !important"; + document.component.snmp3_auth_pass.background="#ddd "; document.component.snmp3_auth_pass.disabled=true; - document.component.snmp3_privacy_method.style.background="#ddd !important"; + document.component.snmp3_privacy_method.style.background="#ddd "; document.component.snmp3_privacy_method.disabled=true; - document.component.snmp3_privacy_pass.style.background="#ddd !important"; + document.component.snmp3_privacy_pass.style.background="#ddd "; document.component.snmp3_privacy_pass.disabled=true; - document.component.snmp3_auth_method.style.background="#ddd !important"; + document.component.snmp3_auth_method.style.background="#ddd "; document.component.snmp3_auth_method.disabled=true; - document.component.snmp3_security_level.style.background="#ddd !important"; + document.component.snmp3_security_level.style.background="#ddd "; document.component.snmp3_security_level.disabled=true; + + document.component.command_text.style.background="#ddd"; + document.component.command_text.style.disabled=true; + document.component.command_credential_identifier.style.background="#ddd"; + document.component.command_credential_identifier.disabled=true; + document.component.command_os.style.background="#ddd"; + document.component.command_os.disabled=true; } } @@ -470,7 +580,7 @@ $(document).ready (function () { } }); }); - + $("#left").click (function () { jQuery.each($("select[name='id_tag_selected[]'] option:selected"), function (key, value) { tag_name = $(value).html(); @@ -485,38 +595,38 @@ $(document).ready (function () { } }); }); - + $("#submit-crt").click(function () { $('#id_tag_selected option').map(function() { $(this).prop('selected', true); }); }); - + $("#submit-upd").click(function () { $('#id_tag_selected option').map(function() { $(this).prop('selected', true); }); }); - + if ($("#snmp_version").val() == "3") { $("input[name=snmp3_auth_user]").css({backgroundColor: '#fff'}); $("input[name=snmp3_auth_user]").removeAttr('disabled'); - + $("input[name=snmp3_auth_pass]").css({backgroundColor: '#fff'}); $("input[name=snmp3_auth_pass]").removeAttr('disabled'); - + $("#snmp3_privacy_method").css({backgroundColor: '#fff'}); $("#snmp3_privacy_method").removeAttr('disabled'); - + $("input[name=snmp3_privacy_pass]").css({backgroundColor: '#fff'}); $("input[name=snmp3_privacy_pass]").removeAttr('disabled'); - + $("#snmp3_auth_method").css({backgroundColor: '#fff'}); $("#snmp3_auth_method").removeAttr('disabled'); - + $("#snmp3_security_level").css({backgroundColor: '#fff'}); $("#snmp3_security_level").removeAttr('disabled'); - + $("input[name=active_snmp_v3]").val(1); $("input[name=snmp_community]").css({backgroundColor: '#ddd'}); $("input[name=snmp_community]").attr("disabled",true); @@ -525,49 +635,47 @@ $(document).ready (function () { $("input[name=snmp3_auth_user]").val(""); $("input[name=snmp3_auth_user]").css({backgroundColor: '#ddd'}); $("input[name=snmp3_auth_user]").attr("disabled", true); - + $("input[name=snmp3_auth_pass]").val(""); $("input[name=snmp3_auth_pass]").css({backgroundColor: '#ddd'}); $("input[name=snmp3_auth_pass]").attr("disabled", true); - + $("#snmp3_privacy_method").css({backgroundColor: '#ddd'}); $("#snmp3_privacy_method").attr("disabled", true); - + $("input[name=snmp3_privacy_pass]").val(""); $("input[name=snmp3_privacy_pass]").css({backgroundColor: '#ddd'}); $("input[name=snmp3_privacy_pass]").attr("disabled", true); - + $("#snmp3_auth_method").css({backgroundColor: '#ddd'}); $("#snmp3_auth_method").attr("disabled", true); - + $("#snmp3_security_level").css({backgroundColor: '#ddd'}); $("#snmp3_security_level").attr("disabled", true); - + $("input[name=active_snmp_v3]").val(0); - $("input[name=snmp_community]").css({backgroundColor: '#fff'}); - $("input[name=snmp_community]").removeAttr('disabled'); } - + $("#snmp_version").change(function () { if (this.value == "3") { $("input[name=snmp3_auth_user]").css({backgroundColor: '#fff'}); $("input[name=snmp3_auth_user]").removeAttr('disabled'); - + $("input[name=snmp3_auth_pass]").css({backgroundColor: '#fff'}); $("input[name=snmp3_auth_pass]").removeAttr('disabled'); - + $("#snmp3_privacy_method").css({backgroundColor: '#fff'}); $("#snmp3_privacy_method").removeAttr('disabled'); - + $("input[name=snmp3_privacy_pass]").css({backgroundColor: '#fff'}); $("input[name=snmp3_privacy_pass]").removeAttr('disabled'); - + $("#snmp3_auth_method").css({backgroundColor: '#fff'}); $("#snmp3_auth_method").removeAttr('disabled'); - + $("#snmp3_security_level").css({backgroundColor: '#fff'}); $("#snmp3_security_level").removeAttr('disabled'); - + $("input[name=active_snmp_v3]").val(1); $("input[name=snmp_community]").css({backgroundColor: '#ddd'}); $("input[name=snmp_community]").attr("disabled",true); @@ -576,50 +684,50 @@ $(document).ready (function () { $("input[name=snmp3_auth_user]").val(""); $("input[name=snmp3_auth_user]").css({backgroundColor: '#ddd'}); $("input[name=snmp3_auth_user]").attr("disabled", true); - + $("input[name=snmp3_auth_pass]").val(""); $("input[name=snmp3_auth_pass]").css({backgroundColor: '#ddd'}); $("input[name=snmp3_auth_pass]").attr("disabled", true); - + $("#snmp3_privacy_method").css({backgroundColor: '#ddd'}); $("#snmp3_privacy_method").attr("disabled", true); - + $("input[name=snmp3_privacy_pass]").val(""); $("input[name=snmp3_privacy_pass]").css({backgroundColor: '#ddd'}); $("input[name=snmp3_privacy_pass]").attr("disabled", true); - + $("#snmp3_auth_method").css({backgroundColor: '#ddd'}); $("#snmp3_auth_method").attr("disabled", true); - + $("#snmp3_security_level").css({backgroundColor: '#ddd'}); $("#snmp3_security_level").attr("disabled", true); - + $("input[name=active_snmp_v3]").val(0); $("input[name=snmp_community]").css({backgroundColor: '#fff'}); $("input[name=snmp_community]").removeAttr('disabled'); } }); - + $("#type"). change(function () { if ($("#snmp_version").val() == "3") { $("input[name=snmp3_auth_user]").css({backgroundColor: '#fff'}); $("input[name=snmp3_auth_user]").removeAttr('disabled'); - + $("input[name=snmp3_auth_pass]").css({backgroundColor: '#fff'}); $("input[name=snmp3_auth_pass]").removeAttr('disabled'); - + $("#snmp3_privacy_method").css({backgroundColor: '#fff'}); $("#snmp3_privacy_method").removeAttr('disabled'); - + $("input[name=snmp3_privacy_pass]").css({backgroundColor: '#fff'}); $("input[name=snmp3_privacy_pass]").removeAttr('disabled'); - + $("#snmp3_auth_method").css({backgroundColor: '#fff'}); $("#snmp3_auth_method").removeAttr('disabled'); - + $("#snmp3_security_level").css({backgroundColor: '#fff'}); $("#snmp3_security_level").removeAttr('disabled'); - + $("input[name=active_snmp_v3]").val(1); $("input[name=snmp_community]").css({backgroundColor: '#ddd'}); $("input[name=snmp_community]").attr("disabled",true); @@ -628,30 +736,28 @@ $(document).ready (function () { $("input[name=snmp3_auth_user]").val(""); $("input[name=snmp3_auth_user]").css({backgroundColor: '#ddd'}); $("input[name=snmp3_auth_user]").attr("disabled", true); - + $("input[name=snmp3_auth_pass]").val(""); $("input[name=snmp3_auth_pass]").css({backgroundColor: '#ddd'}); $("input[name=snmp3_auth_pass]").attr("disabled", true); - + $("#snmp3_privacy_method").css({backgroundColor: '#ddd'}); $("#snmp3_privacy_method").attr("disabled", true); - + $("input[name=snmp3_privacy_pass]").val(""); $("input[name=snmp3_privacy_pass]").css({backgroundColor: '#ddd'}); $("input[name=snmp3_privacy_pass]").attr("disabled", true); - + $("#snmp3_auth_method").css({backgroundColor: '#ddd'}); $("#snmp3_auth_method").attr("disabled", true); - + $("#snmp3_security_level").css({backgroundColor: '#ddd'}); $("#snmp3_security_level").attr("disabled", true); - + $("input[name=active_snmp_v3]").val(0); - $("input[name=snmp_community]").css({backgroundColor: '#fff'}); - $("input[name=snmp_community]").removeAttr('disabled'); } }); - + $("#snmp_version" ).trigger("change"); }); diff --git a/pandora_console/godmode/modules/manage_network_components_form_common.php b/pandora_console/godmode/modules/manage_network_components_form_common.php index 2a55efb1dd..ed46957725 100644 --- a/pandora_console/godmode/modules/manage_network_components_form_common.php +++ b/pandora_console/godmode/modules/manage_network_components_form_common.php @@ -77,7 +77,7 @@ $sql = sprintf( 'SELECT id_tipo, descripcion FROM ttipo_modulo WHERE categoria IN (%s) - ORDER BY descripcion', + ORDER BY id_tipo ASC', implode(',', $categories) ); $table->data[1][1] = html_print_select_from_sql( diff --git a/pandora_console/godmode/modules/manage_network_components_form_network.php b/pandora_console/godmode/modules/manage_network_components_form_network.php index 0f39406ce9..056e355814 100755 --- a/pandora_console/godmode/modules/manage_network_components_form_network.php +++ b/pandora_console/godmode/modules/manage_network_components_form_network.php @@ -1,17 +1,32 @@ colspan['snmp_2'][1] = 3; +$data[1] = html_print_input_text( + 'snmp_oid', + $snmp_oid, + '', + 30, + 400, + true +); + $data[2] = __('SNMP community'); -$data[3] = html_print_input_text('snmp_community', $snmp_community, '', 15, 60, true); +$data[3] = html_print_input_text( + 'snmp_community', + $snmp_community, + '', + 15, + 60, + true +); push_table_row($data, 'snmp_2'); $data = []; $data[0] = __('Auth user'); -$data[1] = html_print_input_text('snmp3_auth_user', $snmp3_auth_user, '', 15, 60, true); +$data[1] = html_print_input_text( + 'snmp3_auth_user', + $snmp3_auth_user, + '', + 15, + 60, + true +); $data[2] = __('Auth password'); -$data[3] = html_print_input_password('snmp3_auth_pass', $snmp3_auth_pass, '', 15, 60, true); -$data[3] .= html_print_input_hidden_extended('active_snmp_v3', 0, 'active_snmp_v3_mncfn', true); +$data[3] = html_print_input_password( + 'snmp3_auth_pass', + $snmp3_auth_pass, + '', + 15, + 60, + true +); +$data[3] .= html_print_input_hidden_extended( + 'active_snmp_v3', + 0, + 'active_snmp_v3_mncfn', + true +); push_table_row($data, 'field_snmpv3_row1'); $data = []; $data[0] = __('Privacy method'); -$data[1] = html_print_select(['DES' => __('DES'), 'AES' => __('AES')], 'snmp3_privacy_method', $snmp3_privacy_method, '', '', '', true); +$data[1] = html_print_select( + [ + 'DES' => __('DES'), + 'AES' => __('AES'), + ], + 'snmp3_privacy_method', + $snmp3_privacy_method, + '', + '', + '', + true +); $data[2] = __('Privacy pass'); -$data[3] = html_print_input_password('snmp3_privacy_pass', $snmp3_privacy_pass, '', 15, 60, true); +$data[3] = html_print_input_password( + 'snmp3_privacy_pass', + $snmp3_privacy_pass, + '', + 15, + 60, + true +); push_table_row($data, 'field_snmpv3_row2'); $data = []; $data[0] = __('Auth method'); -$data[1] = html_print_select(['MD5' => __('MD5'), 'SHA' => __('SHA')], 'snmp3_auth_method', $snmp3_auth_method, '', '', '', true); +$data[1] = html_print_select( + [ + 'MD5' => __('MD5'), + 'SHA' => __('SHA'), + ], + 'snmp3_auth_method', + $snmp3_auth_method, + '', + '', + '', + true +); $data[2] = __('Security level'); $data[3] = html_print_select( [ @@ -110,12 +187,11 @@ $data[1] = html_print_extended_select_for_post_process( false, true ); -$data[2] = $data[3] = ''; +$data[2] = ''; +$data[3] = ''; push_table_row($data, 'field_process'); - - -// Advanced stuff +// Advanced stuff. $data = []; $data[0] = __('TCP send'); $data[1] = html_print_textarea('tcp_send', 2, 65, $tcp_send, '', true); @@ -129,6 +205,64 @@ $data[1] = html_print_textarea('tcp_rcv', 2, 65, $tcp_rcv, '', true); $table->colspan['tcp_receive'][1] = 3; push_table_row($data, 'tcp_receive'); + +$data = []; +$data[0] = __('Command'); +$data[1] = html_print_input_text_extended( + 'command_text', + $command_text, + 'command_text', + '', + 100, + 10000, + $disabledBecauseInPolicy, + '', + $largeClassDisabledBecauseInPolicy, + true +); +$table->colspan['row-cmd-row-1'][1] = 3; +push_table_row($data, 'row-cmd-row-1'); + +require_once $config['homedir'].'/include/class/CredentialStore.class.php'; +$array_credential_identifier = CredentialStore::getKeys('CUSTOM'); + +$data[0] = __('Credential identifier'); +$data[1] = html_print_select( + $array_credential_identifier, + 'command_credential_identifier', + $command_credential_identifier, + '', + __('None'), + '', + true, + false, + false, + '', + $disabledBecauseInPolicy +); + +$array_os = [ + 'inherited' => __('Inherited'), + 'linux' => __('Linux'), + 'windows' => __('Windows'), +]; + +$data[2] = __('Target OS'); +$data[3] = html_print_select( + $array_os, + 'command_os', + $command_os, + '', + '', + '', + true, + false, + false, + '', + $disabledBecauseInPolicy +); + +push_table_row($data, 'row-cmd-row-2'); ?> + width = '100%'; + $table->class = 'pdf-report'; + $table->style = []; + $table->style[0] = 'font-weight: bolder;'; + $table->autosize = 1; + + $table->head = []; + $table->head[0] = $params['nameModule']; + + $table->data = []; + $table->data[0] = $this->getChart( + $params['idAgent'], + $params['nameModule'], + true, + false + ); + + $return = html_print_table($table, true); + } + } catch (Exception $e) { + $return = $e->getMessage(); + } + } + + return $return; + } + + + /** + * Private function for Info size path. + * + * @param string $path Route file. + * + * @return array With values size file and message and status. + */ + private function getLogInfo(string $path): array + { + global $config; + + // Vars. + $mega = 1048576; + $tenMega = 10485760; + + $result = [ + 'value' => 0, + 'message' => '', + 'status' => 0, + ]; + + if (file_exists($path) === true) { + $fileSize = filesize($path); + $sizeServerLog = number_format($fileSize); + $sizeServerLog = (0 + str_replace(',', '', $sizeServerLog)); + + $value = number_format(($fileSize / $mega), 3); + $message = __('You have more than 10 MB of logs'); + $status = 0; + if ($sizeServerLog <= $tenMega) { + $message = __('You have less than 10 MB of logs'); + $status = 1; + } + + $result = [ + 'value' => $value, + 'message' => $message, + 'status' => $status, + ]; + } + + return $result; + } + + + /** + * Undocumented function + * + * @param string|null $method Method data requested. + * @param boolean $return Type return. + * + * @return string|null + */ + public function datatablesDraw( + ?string $method=null, + bool $return=false + ):?string { + if (isset($method) === false) { + $method = get_parameter('name', ''); + } + + if (method_exists($this, $method) === true) { + $data = json_decode($this->{$method}(), true); + } + + $result = []; + if (isset($data) === true + && is_array($data) === true + && count($data) > 0 + ) { + $items = $data['data']; + $dataReduce = array_reduce( + array_keys($data['data']), + function ($carry, $key) use ($items) { + // Transforms array of arrays $data into an array + // of objects, making a post-process of certain fields. + if (isset($items[$key]['status']) === true) { + $acumValue = $items[$key]['value']; + + if ($items[$key]['status'] === 2) { + $items[$key]['value'] = html_print_image( + 'images/icono-warning.png', + true, + [ + 'title' => __('Warning'), + 'style' => 'width:15px;', + ] + ); + } else if ($items[$key]['status'] === 1) { + $items[$key]['value'] = html_print_image( + 'images/exito.png', + true, + [ + 'title' => __('Succesfuly'), + 'style' => 'width:15px;', + ] + ); + } else { + $items[$key]['value'] = html_print_image( + 'images/error_1.png', + true, + [ + 'title' => __('Error'), + 'style' => 'width:15px;', + ] + ); + } + + $items[$key]['value'] .= ' '.$acumValue; + } + + // FIX for customer key. + if ($key === 'customerKey') { + $customerKey = ui_print_truncate_text( + $items[$key]['value'], + 30, + false, + true, + false + ); + $spanValue = ''.$customerKey.''; + $items[$key]['value'] = $spanValue; + } + + if (isset($items[$key]['message']) === false) { + $items[$key]['message'] = ''; + } + + $carry[] = (object) $items[$key]; + return $carry; + } + ); + + $result = [ + 'data' => $dataReduce, + 'recordsTotal' => count($dataReduce), + 'recordsFiltered' => count($dataReduce), + 'idTable' => (isset($data['id']) === true) ? $data['id'] : '', + ]; + } + + // Datatables format: RecordsTotal && recordsfiltered. + if ($return === false) { + echo json_encode($result); + return null; + } else { + return json_encode($result); + } + } + + + /** + * Print Diagnostics Form feedback. + * + * @return void + */ + public function formFeedback(): void + { + $form = [ + 'action' => '#', + 'id' => 'modal_form_feedback', + 'onsubmit' => 'return false;', + 'class' => 'modal', + 'extra' => 'novalidate', + ]; + + $inputs = []; + + $inputs[] = [ + 'label' => __('What happened').'?', + 'id' => 'div-what-happened', + 'class' => 'flex-row', + 'arguments' => [ + 'name' => 'what-happened', + 'type' => 'textarea', + 'value' => '', + 'return' => true, + 'rows' => 1, + 'columns' => 1, + 'size' => 25, + 'attributes' => 'required="required"', + ], + ]; + + $inputs[] = [ + 'label' => __('Your email'), + 'class' => 'flex-row-baseline', + 'arguments' => [ + 'name' => 'email', + 'id' => 'email', + 'type' => 'email', + 'size' => 42, + 'required' => 'required', + ], + ]; + + $inputs[] = [ + 'label' => __('Include installation data'), + 'class' => 'flex-row-vcenter', + 'arguments' => [ + 'name' => 'include_installation_data', + 'id' => 'include_installation_data', + 'type' => 'switch', + 'value' => 1, + ], + ]; + + exit( + $this->printForm( + [ + 'form' => $form, + 'inputs' => $inputs, + ], + true + ) + ); + } + + + /** + * Create cron task form feedback. + * + * @return void Json result AJAX request. + */ + public function createdScheduleFeedbackTask():void + { + global $config; + + $mail_feedback = 'feedback@artica.es'; + $email = $mail_feedback; + $subject = $this->product_name.' Report '.$config['pandora_uid']; + $text = get_parameter('what-happened', ''); + $attachment = get_parameter_switch('include_installation_data', 0); + $email_from = get_parameter_switch('email', ''); + $title = __('Hello Feedback-Men'); + + $product_name = io_safe_output(get_product_name()); + + if (check_acl($config['id_user'], 0, 'PM') !== 1) { + $email = get_mail_admin(); + $name_admin = get_name_admin(); + + $subject = __('Feedback').' '.$product_name.' '.$config['pandora_uid']; + + $title = __('Hello').' '.$name_admin; + } + + $p1 = __( + 'User %s is reporting an issue in its %s experience', + $email_from, + $product_name + ); + $p1 .= ':'; + + $p2 = $text; + + if ($attachment === 1) { + $msg_attch = __('Find some files attached to this mail'); + $msg_attch .= '. '; + $msg_attch .= __( + 'PDF is the diagnostic information retrieved at report time' + ); + $msg_attch .= '. '; + $msg_attch .= __('CSV contains the statuses of every product file'); + $msg_attch .= '. '; + } + + $p3 = __( + 'If you think this report must be escalated, feel free to forward this mail to "%s"', + $mail_feedback + ); + + $legal = __('LEGAL WARNING'); + $legal1 = __( + 'The information contained in this transmission is privileged and confidential information intended only for the use of the individual or entity named above' + ); + $legal1 .= '. '; + $legal2 = __( + 'If the reader of this message is not the intended recipient, you are hereby notified that any dissemination, distribution or copying of this communication is strictly prohibited' + ); + $legal2 .= '. '; + $legal3 = __( + 'If you have received this transmission in error, do not read it' + ); + $legal3 .= '. '; + $legal4 = __( + 'Please immediately reply to the sender that you have received this communication in error and then delete it' + ); + $legal4 .= '.'; + + $patterns = [ + '/__title__/', + '/__p1__/', + '/__p2__/', + '/__attachment__/', + '/__p3__/', + '/__legal__/', + '/__legal1__/', + '/__legal2__/', + '/__legal3__/', + '/__legal4__/', + ]; + + $substitutions = [ + $title, + $p1, + $p2, + $msg_attch, + $p3, + $legal, + $legal1, + $legal2, + $legal3, + $legal4, + ]; + + $html_template = file_get_contents( + $config['homedir'].'/include/templates/feedback_send_mail.html' + ); + + $text = preg_replace($patterns, $substitutions, $html_template); + + $idUserTask = db_get_value( + 'id', + 'tuser_task', + 'function_name', + 'cron_task_feedback_send_mail' + ); + + // Params for send mail with cron. + $parameters = [ + 0 => '0', + 1 => $email, + 2 => $subject, + 3 => $text, + 4 => $attachment, + 'first_execution' => strtotime('now'), + ]; + + // Values insert task cron. + $values = [ + 'id_usuario' => $config['id_user'], + 'id_user_task' => $idUserTask, + 'args' => serialize($parameters), + 'scheduled' => 'no', + 'id_grupo' => 0, + ]; + + $result = db_process_sql_insert( + 'tuser_task_scheduled', + $values + ); + + $error = 1; + if ($result === false) { + $error = 0; + } + + $return = [ + 'error' => $error, + 'title' => [ + __('Failed'), + __('Success'), + ], + 'text' => [ + ui_print_error_message(__('Invalid cron task'), '', true), + ui_print_success_message(__('Cron task generated'), '', true), + ], + ]; + + exit(json_encode($return)); + } + + + /** + * Print Diagnostics PDF report. + * + * @param string|null $filename Filename. + * + * @return void + */ + public function exportPDF(?string $filename=null):void + { + global $config; + + $this->pdf = true; + + enterprise_include_once('/include/class/Pdf.class.php'); + $mpdf = new Pdf([]); + + // ADD style. + $mpdf->addStyle($config['homedir'].'/include/styles/diagnostics.css'); + + // ADD Metadata. + $product_name = io_safe_output(get_product_name()); + $mpdf->setMetadata( + __('Diagnostics Info'), + $product_name.' Enteprise', + $product_name, + __( + 'Automated %s report for user defined report', + $product_name + ) + ); + + // ADD Header. + $mpdf->setHeaderHTML(__('Diagnostics Info')); + + // ADD content to report. + $mpdf->addHTML( + $this->printMethodsDiagnostigsInfo() + ); + + $mpdf->addHTML( + $this->printCharts() + ); + + // ADD Footer. + $mpdf->setFooterHTML(); + + // Write html filename. + $mpdf->writePDFfile($filename); + } + + + /** + * Send Csv md5 files. + * + * @return string + */ + public function csvMd5Files():string + { + global $config; + + // Extract files. + $files = $this->recursiveDirValidation($config['homedir']); + + // Type divider. + $divider = html_entity_decode($config['csv_divider']); + + // BOM. + $result = pack('C*', 0xEF, 0xBB, 0xBF); + + $result .= __('Path').$divider.__('MD5')."\n"; + foreach ($files as $key => $value) { + $result .= $key.$divider.$value."\n"; + } + + return $result; + } + + + /** + * Function to return array with name file -> MD%. + * + * @param string $dir Directory. + * + * @return array Result all files in directory recursively. + */ + private function recursiveDirValidation(string $dir):array + { + $result = []; + + $dir_content = scandir($dir); + + // Dont check attachment. + if (strpos($dir, $config['homedir'].'/attachment') === false) { + if (is_array($dir_content) === true) { + foreach (scandir($dir) as $file) { + if ('.' === $file || '..' === $file) { + continue; + } + + if (is_dir($dir.'/'.$file) === true) { + $result += $this->recursiveDirValidation( + $dir.'/'.$file + ); + } else { + $result[$dir.'/'.$file] = md5_file($dir.'/'.$file); + } + } + } + } + + return $result; + } + + + /** + * Send PHP info in report. + * + * @param string $filename Download dir report. + * + * @return void + */ + public function phpInfoReports(string $filename) + { + global $config; + + $this->pdf = true; + + // Extract info PHP. + ob_start(); + phpinfo(); + $php_info = ob_get_clean(); + + enterprise_include_once('/include/class/Pdf.class.php'); + $mpdf = new Pdf([]); + + // ADD Metadata. + $product_name = io_safe_output(get_product_name()); + $mpdf->setMetadata( + __('PHP Info'), + $product_name.' Enteprise', + $product_name, + __( + 'Automated %s report for user defined report', + $product_name + ) + ); + + // ADD Header. + $mpdf->setHeaderHTML(__('PHP Info')); + + // ADD content to report. + $mpdf->addHTML($php_info); + + // ADD Footer. + $mpdf->setFooterHTML(); + + // Write html filename. + $mpdf->writePDFfile($filename); + } + + +} diff --git a/pandora_console/include/class/HelpFeedBack.class.php b/pandora_console/include/class/HelpFeedBack.class.php new file mode 100644 index 0000000000..825d3c923f --- /dev/null +++ b/pandora_console/include/class/HelpFeedBack.class.php @@ -0,0 +1,390 @@ +AJAXMethods); + } + + + /** + * Constructor. + * + * @param string $ajax_controller Controller. + * + * @return object + */ + public function __construct($ajax_controller) + { + $this->ajaxController = $ajax_controller; + + return $this; + } + + + /** + * Main method. + * + * @return void + */ + public function run() + { + ui_require_css_File('discovery'); + ui_require_css_file('help_feedback'); + + $help_url = get_parameter('url', null); + if ($help_url === null) { + echo __('Page not found'); + } else { + ?> + + '; + + echo $hidden; + + echo '
    '; + // Load feedback form. + echo $this->loadFeedbackForm(); + echo '
    '; + } + + + /** + * Loads a feedback form + * + * @return​ ​string HTML code for form. + * + * @return Function loadFeedbackForm. + */ + public function loadFeedbackForm() + { + global $config; + + $form = [ + 'action' => '#', + 'id' => 'feedback_form', + 'onsubmit' => 'return false;', + ]; + + $inputs = [ + [ + 'wrapper' => 'div', + 'block_id' => 'flex-row-baseline w100p', + 'class' => 'flex-row-baseline w100p', + 'direct' => 1, + 'block_content' => [ + [ + 'arguments' => [ + 'label' => __('Sugesstion'), + 'type' => 'radio_button', + 'attributes' => 'class="btn"', + 'name' => 'suggestion', + 'id' => 'suggestion', + 'script' => 'disableRadio(\'report\')', + 'return' => true, + ], + ], + [ + 'arguments' => [ + 'label' => __('Something is not quite right'), + 'type' => 'radio_button', + 'attributes' => 'class="btn"', + 'name' => 'report', + 'id' => 'report', + 'script' => 'disableRadio(\'suggestion\')', + 'return' => true, + ], + ], + ], + ], + [ + + 'label' => __('What happened?'), + 'class' => 'explain', + 'arguments' => [ + 'class' => 'textarea_feedback', + 'id' => 'feedback_text', + 'type' => 'textarea', + 'name' => 'feedback_text', + ], + ], + [ + 'label' => __('Your Email'), + 'arguments' => [ + 'id' => 'feedback_email', + 'name' => 'feedback_email', + 'input_class' => 'email_feedback', + 'class' => 'email_feedback', + 'type' => 'email', + 'required' => true, + ], + ], + [ + 'arguments' => [ + 'button_class' => 'btn_submit', + 'class' => 'btn_submit', + 'attributes' => 'class="sub next btn_submit_feed_back"', + 'type' => 'submit', + 'id' => 'submit_feedback', + 'label' => __('Submit'), + ], + ], + ]; + + $output = ui_print_toggle( + [ + 'id' => 'toggle_help_feedback', + 'content' => $this->printForm( + [ + 'form' => $form, + 'inputs' => $inputs, + ], + true + ), + 'name' => __('Feedback'), + 'return' => true, + 'class' => 'no-border', + 'img_a' => 'images/arrow_down_white.png', + 'img_b' => 'images/arrow_up_white.png', + + ] + ); + + $output .= $this->loadJS(); + return $output; + } + + + /** + * Function send_mail_method,we use send_email_attachment method + * from functions_cron.php. + * + * @param​ ​string​ $feedback_option type fo mail. + * @param​ ​string​ $feedback_text text mail. + * @param​ ​string​ $feedback_mail costumer mail. + * + * @return void. + */ + public function sendMailMethod() + { + $suggestion = get_parameter('type', 'false'); + $feedback_text = get_parameter('feedback_text', null); + $feedback_mail = get_parameter('feedback_email', null); + $help_url = get_parameter('help_url', 'unknown'); + + $section = explode('title=', $help_url, 2); + + $subject = ''; + if (is_array($section) === true && isset($section[1]) === true) { + $subject = '['.$section[1].']'; + } + + if ($suggestion !== 'false') { + $subject .= __('[pandorafms wiki] New suggestion'); + } else { + $subject .= __('[pandorafms wiki] New report'); + } + + if (empty($feedback_mail) === true) { + $error = [ + 'error' => __( + 'Please provide your email address, we promise not to bother you' + ), + ]; + } + + if (empty($feedback_text) === true) { + if ($suggestion !== 'false') { + $msg = 'Please provide some feedback. Write something awesome!'; + } else { + $msg = 'Please provide some feedback. We\'ll appreciate it!'; + } + + $error = [ + 'error' => __($msg), + ]; + } + + if ($error !== null) { + echo json_encode($error); + exit; + } + + enterprise_include_once('include/functions_cron.php'); + + $uid = $config['pandora_uid']; + if (empty($uid) === true) { + $uid = 'not registered'; + } + + $body = '
    • User mail '.$feedback_mail.'
    • '; + $body .= '
    • Console '.$uid.'
    • '; + $body .= '
    • URL '.$help_url.'
    '; + $body .= '

    Message

    '; + $body .= '

    '.$feedback_text.'

    '; + + $res = enterprise_hook( + 'send_email_attachment', + [ + 'feedback@artica.es', + $body, + $subject, + ] + ); + + // Response. + if ($res == 1) { + $r = ['error' => '']; + } else { + $r = ['error' => __('Something went wrong while sending the report.')]; + } + + echo json_encode($r); + + exit; + } + + + /** + * Load extra JS. + * + * @return string JS content. + */ + public function loadJS() + { + ob_start(); + ?> + + map; + // ACL. + $networkmap_write = check_acl( + $config['id_user'], + $networkmap['id_group'], + 'MW' + ); + $simulate = false; if (isset($networkmap['__simulated']) === false) { $networkmap['filter'] = json_decode( @@ -2711,6 +2720,7 @@ class NetworkMap $output .= 'var networkmap_center = [ '.$networkmap['center_x'].', '.$networkmap['center_y']."];\n"; $output .= 'var networkmap_dimensions = [ '.$networkmap['width'].', '.$networkmap['height']."];\n"; $output .= 'var enterprise_installed = '.((int) enterprise_installed()).";\n"; + $output .= 'var networkmap_write = '.$networkmap_write.";\n"; $output .= 'var node_radius = '.$networkmap['filter']['node_radius'].";\n"; $output .= 'var networkmap_holding_area_dimensions = '.json_encode($networkmap['filter']['holding_area']).";\n"; $output .= "var networkmap = {'nodes': [], 'links': []};\n"; diff --git a/pandora_console/include/class/WelcomeWindow.class.php b/pandora_console/include/class/WelcomeWindow.class.php new file mode 100644 index 0000000000..c69fbe40d9 --- /dev/null +++ b/pandora_console/include/class/WelcomeWindow.class.php @@ -0,0 +1,900 @@ + $msg] + ); + } + + + /** + * Checks if target method is available to be called using AJAX. + * + * @param string $method Target method. + * + * @return boolean True allowed, false not. + */ + public function ajaxMethod($method) + { + global $config; + + // Check access. + check_login(); + + return in_array($method, $this->AJAXMethods); + } + + + /** + * Constructor. + * + * @param boolean $must_run Must run or not. + * @param string $ajax_controller Controller. + * + * @return object + * @throws Exception On error. + */ + public function __construct( + bool $must_run=false, + $ajax_controller='include/ajax/welcome_window' + ) { + $this->ajaxController = $ajax_controller; + + if ($this->initialize($must_run) !== true) { + throw new Exception('Must not be shown'); + } + + return $this; + } + + + /** + * Main method. + * + * @return void + */ + public function run() + { + ui_require_css_file('new_installation_welcome_window'); + echo '