diff --git a/extras/deploy-scripts/pandora_deploy_community.sh b/extras/deploy-scripts/pandora_deploy_community.sh index a0f08822e1..f660d5338d 100644 --- a/extras/deploy-scripts/pandora_deploy_community.sh +++ b/extras/deploy-scripts/pandora_deploy_community.sh @@ -72,7 +72,7 @@ check_pre_pandora () { export MYSQL_PWD=$DBPASS echo -en "${cyan}Checking environment ... ${reset}" - rpm -qa | grep pandora &>> /dev/null && local fail=true + rpm -qa | grep 'pandorafms_' &>> /dev/null && local fail=true [ -d "$PANDORA_CONSOLE" ] && local fail=true [ -f /usr/bin/pandora_server ] && local fail=true echo "use $DBNAME" | mysql -uroot -P$DBPORT -h$DBHOST &>> /dev/null && local fail=true diff --git a/extras/deploy-scripts/pandora_deploy_community_el8.sh b/extras/deploy-scripts/pandora_deploy_community_el8.sh index 5b549a2933..a4a80af6c5 100644 --- a/extras/deploy-scripts/pandora_deploy_community_el8.sh +++ b/extras/deploy-scripts/pandora_deploy_community_el8.sh @@ -76,7 +76,7 @@ check_pre_pandora () { export MYSQL_PWD=$DBPASS echo -en "${cyan}Checking environment ... ${reset}" - rpm -qa | grep pandora &>> /dev/null && local fail=true + rpm -qa | grep 'pandorafms_' &>> /dev/null && local fail=true [ -d "$PANDORA_CONSOLE" ] && local fail=true [ -f /usr/bin/pandora_server ] && local fail=true echo "use $DBNAME" | mysql -uroot -P$DBPORT -h$DBHOST &>> /dev/null && local fail=true @@ -350,8 +350,8 @@ vmware_dependencies=" \ perl-Crypt-Random-Seed \ perl-Math-Random-ISAAC \ perl-JSON \ + perl-Crypt-SSLeay \ http://firefly.artica.es/centos8/perl-Crypt-OpenSSL-AES-0.02-1.el8.x86_64.rpm \ - http://mirror.ghettoforge.org/distributions/gf/el/8/gf/x86_64/perl-Crypt-SSLeay-0.73_07-1.gf.el8.x86_64.rpm \ http://firefly.artica.es/centos8/VMware-vSphere-Perl-SDK-6.5.0-4566394.x86_64.rpm" execute_cmd "dnf install -y $vmware_dependencies" "Installing SDK VMware perl dependencies" diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 4bcb311179..bd5e054dec 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.763-220729 +Version: 7.0NG.763-220810 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 b7acf75bb5..2debaf095e 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.763-220729" +pandora_version="7.0NG.763-220810" 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/pandora_agent b/pandora_agents/unix/pandora_agent index 8f6ec3da09..ab868d1863 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -1015,7 +1015,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.763'; -use constant AGENT_BUILD => '220729'; +use constant AGENT_BUILD => '220810'; # 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 bc7ebfadde..72c414b24e 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.763 -%define release 220729 +%define release 220810 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 107082764b..aaace944bb 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.763 -%define release 220729 +%define release 220810 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 27f235a8f3..38534c985b 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.763" -PI_BUILD="220729" +PI_BUILD="220810" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index 74851fcc91..698c4466f2 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{220729} +{220810} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 723432d9eb..0cb7ef8656 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.763 Build 220729") +#define PANDORA_VERSION ("7.0NG.763 Build 220810") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index 0968e4a0ae..d76928306b 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.763(Build 220729))" + VALUE "ProductVersion", "(7.0NG.763(Build 220810))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index c2dd2f9a32..79b82ba9f9 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.763-220729 +Version: 7.0NG.763-220810 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 08d2e951f3..ba58200828 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.763-220729" +pandora_version="7.0NG.763-220810" package_pear=0 package_pandora=1 diff --git a/pandora_console/extras/mr/56.sql b/pandora_console/extras/mr/56.sql index 429347777b..34ee826ea2 100644 --- a/pandora_console/extras/mr/56.sql +++ b/pandora_console/extras/mr/56.sql @@ -40,6 +40,9 @@ ALTER TABLE `tautoconfig` ADD COLUMN `executed` TINYINT UNSIGNED NOT NULL DEFAUL ALTER TABLE `tusuario` DROP COLUMN `metaconsole_assigned_server`; ALTER TABLE `tagente` ADD COLUMN `fixed_ip` TINYINT UNSIGNED NOT NULL DEFAULT 0; +ALTER TABLE `tipam_network` DROP FOREIGN KEY `tipam_network_ibfk_1`; +ALTER TABLE `tipam_network` MODIFY COLUMN `id_recon_task` INT UNSIGNED DEFAULT 0; +ALTER TABLE `tipam_network` ADD CONSTRAINT `tipam_network_ibfk_1` FOREIGN KEY (`id_recon_task`) REFERENCES trecon_task(`id_rt`) ON DELETE SET NULL ON UPDATE CASCADE; ALTER TABLE `tevent_filter` ADD COLUMN `search_secondary_groups` INT NOT NULL DEFAULT 0; diff --git a/pandora_console/general/header.php b/pandora_console/general/header.php index f72c9f19bc..6bc2c266d3 100644 --- a/pandora_console/general/header.php +++ b/pandora_console/general/header.php @@ -436,9 +436,22 @@ echo sprintf('<div id="header_table" class="header_table_%s">', $menuTypeClass); ); $header_logout .= '</a></div>'; - echo '<div class="header_left"><span class="header_title">'.$config['custom_title_header'].'</span><span class="header_subtitle">'.$config['custom_subtitle_header'].'</span></div> + if (is_reporting_console_node() === true) { + echo '<div class="header_left">'; + echo '<span class="header_title">'; + echo $config['custom_title_header']; + echo '</span>'; + echo '<span class="header_subtitle">'; + echo $config['custom_subtitle_header']; + echo '</span>'; + echo '</div>'; + echo '<div class="header_center"></div>'; + echo '<div class="header_right">'.$header_support, $header_docu, $header_user, $header_logout.'</div>'; + } else { + echo '<div class="header_left"><span class="header_title">'.$config['custom_title_header'].'</span><span class="header_subtitle">'.$config['custom_subtitle_header'].'</span></div> <div class="header_center">'.$header_searchbar.'</div> <div class="header_right">'.$header_autorefresh, $header_autorefresh_counter, $header_discovery, $servers_list, $header_feedback, $header_support, $header_docu, $header_user, $header_logout.'</div>'; + } ?> </div> <!-- Closes #table_header_inner --> </div> <!-- Closes #table_header --> diff --git a/pandora_console/general/main_menu.php b/pandora_console/general/main_menu.php index 590dbe328a..3ce49b646a 100644 --- a/pandora_console/general/main_menu.php +++ b/pandora_console/general/main_menu.php @@ -58,6 +58,10 @@ if (isset($config['autohidden_menu']) === true && (bool) $config['autohidden_men // Start of full lateral menu. echo sprintf('<div id="menu_full" class="menu_full_%s">', $menuTypeClass); +$url_logo = ui_get_full_url('index.php'); +if (is_reporting_console_node() === true) { + $url_logo = 'index.php?logged=1&sec=discovery&sec2=godmode/servers/discovery&wiz=tasklist'; +} // Header logo. html_print_div( @@ -65,7 +69,7 @@ html_print_div( 'class' => 'logo_green', 'content' => html_print_anchor( [ - 'href' => ui_get_full_url('index.php'), + 'href' => $url_logo, 'content' => html_print_header_logo_image( $menuCollapsed, true diff --git a/pandora_console/general/reporting_console_node.php b/pandora_console/general/reporting_console_node.php new file mode 100644 index 0000000000..61aedcf310 --- /dev/null +++ b/pandora_console/general/reporting_console_node.php @@ -0,0 +1,103 @@ +<?php +/** + * Static page to lock access to console but console reporting + * + * @category Reporting + * @package Pandora FMS + * @subpackage Applications + * @version 1.0.0 + * @license See below + * + * ______ ___ _______ _______ ________ + * | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __| + * | __/| _ | | _ || _ | _| _ | | ___| |__ | + * |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______| + * + * ============================================================================ + * Copyright (c) 2005-2022 Artica Soluciones Tecnologicas + * Please see http://pandorafms.org for full contribution list + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation for version 2. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * ============================================================================ + */ + +global $config; + +// Begin. +echo ui_require_css_file('maintenance', 'include/styles/', true); + +$data = []; +$data['id_node'] = $config['metaconsole_node_id']; +$data['check_ver'] = $config['current_package']; +$data['check_mr'] = $config['MR']; +$data['collection_max_size'] = $config['collection_max_size']; +$data['check_post_max_size'] = ini_get('post_max_size'); +$data['check_upload_max_filesize'] = ini_get('upload_max_filesize'); +$data['check_memory_limit'] = ini_get('memory_limit'); +$data['check_php_version'] = phpversion(); + +?> +<html> +<body class="responsive-height"> + <div class="responsive center padding-6"> + <p><?php echo __('Console only reporting node'); ?></p> + <br> + <br> + + <?php + html_print_image( + 'images/maintenance.png', + false, + [ + 'class' => 'responsive', + 'width' => 800, + ] + ); + ?> + + <br> + <br> + <p><?php echo __('Info'); ?></p> + <ul class="container-list"> + <li> + <span class=title> + <?php echo __('Version'); ?>: + </span> + <span> + <?php echo $config['current_package']; ?> + </span> + </li> + <li> + <span class=title> + <?php echo __('Mr'); ?>: + </span> + <span> + <?php echo $config['MR']; ?> + </span> + </li> + <li> + <span class=title> + <?php echo __('Memory limit'); ?>: + </span> + <span> + <?php echo ini_get('memory_limit'); ?> + </span> + </li> + <li> + <span class=title> + <?php echo __('Php version'); ?>: + </span> + <span> + <?php echo phpversion(); ?> + </span> + </li> + </ul> + </div> +</body> + +</html> \ No newline at end of file diff --git a/pandora_console/godmode/agentes/module_manager_editor_common.php b/pandora_console/godmode/agentes/module_manager_editor_common.php index 48b359ba1c..2c6d71b2ad 100644 --- a/pandora_console/godmode/agentes/module_manager_editor_common.php +++ b/pandora_console/godmode/agentes/module_manager_editor_common.php @@ -1518,7 +1518,7 @@ $(document).ready (function () { } else{ window.open( - 'https://pandorafms.com/manual/en/documentation/03_monitoring/03_remote_monitorins#monitoring_through_network_modules_with_snmp', + 'https://pandorafms.com/manual/en/documentation/03_monitoring/03_remote_monitoring#monitoring_through_network_modules_with_snmp', '_blank', 'width=800,height=600' ); diff --git a/pandora_console/godmode/menu.php b/pandora_console/godmode/menu.php index 1337098126..1475038cc2 100644 --- a/pandora_console/godmode/menu.php +++ b/pandora_console/godmode/menu.php @@ -28,15 +28,18 @@ // Begin. require_once 'include/config.php'; +require_once 'include/functions_menu.php'; check_login(); -enterprise_include('godmode/menu.php'); -require_once 'include/functions_menu.php'; - +$access_console_node = !is_reporting_console_node(); $menu_godmode = []; $menu_godmode['class'] = 'godmode'; +if ($access_console_node === true) { + enterprise_include('godmode/menu.php'); +} + if ((bool) check_acl($config['id_user'], 0, 'AR') === true || (bool) check_acl($config['id_user'], 0, 'AW') === true || (bool) check_acl($config['id_user'], 0, 'RR') === true @@ -46,32 +49,35 @@ if ((bool) check_acl($config['id_user'], 0, 'AR') === true $sub = []; $sub['godmode/servers/discovery&wiz=main']['text'] = __('Start'); $sub['godmode/servers/discovery&wiz=main']['id'] = 'Discovery'; + $sub['godmode/servers/discovery&wiz=tasklist']['text'] = __('Task list'); $sub['godmode/servers/discovery&wiz=tasklist']['id'] = 'tasklist'; - if ((bool) check_acl($config['id_user'], 0, 'AW') === true - || (bool) check_acl($config['id_user'], 0, 'PM') === true - ) { + if ($access_console_node === true) { + if ((bool) check_acl($config['id_user'], 0, 'AW') === true + || (bool) check_acl($config['id_user'], 0, 'PM') === true + ) { + if ((bool) check_acl($config['id_user'], 0, 'AW') === true) { + $sub2 = []; + $sub2['godmode/servers/discovery&wiz=hd&mode=netscan']['text'] = __('Network scan'); + enterprise_hook('hostdevices_submenu'); + $sub2['godmode/servers/discovery&wiz=hd&mode=customnetscan']['text'] = __('Custom network scan'); + } + + if ((bool) check_acl($config['id_user'], 0, 'PM') === true) { + $sub2['godmode/servers/discovery&wiz=hd&mode=managenetscanscripts']['text'] = __('Manage scan scripts'); + } + + $sub['godmode/servers/discovery&wiz=hd']['text'] = __('Host & devices'); + $sub['godmode/servers/discovery&wiz=hd']['id'] = 'hd'; + $sub['godmode/servers/discovery&wiz=hd']['sub2'] = $sub2; + } + if ((bool) check_acl($config['id_user'], 0, 'AW') === true) { - $sub2 = []; - $sub2['godmode/servers/discovery&wiz=hd&mode=netscan']['text'] = __('Network scan'); - enterprise_hook('hostdevices_submenu'); - $sub2['godmode/servers/discovery&wiz=hd&mode=customnetscan']['text'] = __('Custom network scan'); + enterprise_hook('applications_menu'); + enterprise_hook('cloud_menu'); + enterprise_hook('console_task_menu'); } - - if ((bool) check_acl($config['id_user'], 0, 'PM') === true) { - $sub2['godmode/servers/discovery&wiz=hd&mode=managenetscanscripts']['text'] = __('Manage scan scripts'); - } - - $sub['godmode/servers/discovery&wiz=hd']['text'] = __('Host & devices'); - $sub['godmode/servers/discovery&wiz=hd']['id'] = 'hd'; - $sub['godmode/servers/discovery&wiz=hd']['sub2'] = $sub2; - } - - if ((bool) check_acl($config['id_user'], 0, 'AW') === true) { - enterprise_hook('applications_menu'); - enterprise_hook('cloud_menu'); - enterprise_hook('console_task_menu'); } // Add to menu. @@ -81,309 +87,311 @@ if ((bool) check_acl($config['id_user'], 0, 'AR') === true $menu_godmode['discovery']['sub'] = $sub; } - -$sub = []; -if ((bool) check_acl($config['id_user'], 0, 'AW') === true || (bool) check_acl($config['id_user'], 0, 'AD') === true) { - $sub['godmode/agentes/modificar_agente']['text'] = __('Manage agents'); - $sub['godmode/agentes/modificar_agente']['id'] = 'Manage agents'; - $sub['godmode/agentes/modificar_agente']['subsecs'] = ['godmode/agentes/configurar_agente']; -} - -if ((bool) check_acl($config['id_user'], 0, 'PM') === true) { - $sub['godmode/agentes/fields_manager']['text'] = __('Custom fields'); - $sub['godmode/agentes/fields_manager']['id'] = 'Custom fields'; - - $sub['godmode/modules/manage_nc_groups']['text'] = __('Component groups'); - $sub['godmode/modules/manage_nc_groups']['id'] = 'Component groups'; - // Category. - $sub['godmode/category/category']['text'] = __('Module categories'); - $sub['godmode/category/category']['id'] = 'Module categories'; - $sub['godmode/category/category']['subsecs'] = 'godmode/category/edit_category'; - - $sub['godmode/modules/module_list']['text'] = __('Module types'); - $sub['godmode/modules/module_list']['id'] = 'Module types'; - - $sub['godmode/groups/modu_group_list']['text'] = __('Module groups'); - $sub['godmode/groups/modu_group_list']['id'] = 'Module groups'; -} - -if ((bool) check_acl($config['id_user'], 0, 'AW') === true) { - // Netflow. - if ((bool) $config['activate_netflow'] === true) { - $sub['godmode/netflow/nf_edit']['text'] = __('Netflow filters'); - $sub['godmode/netflow/nf_edit']['id'] = 'Netflow filters'; - } -} - -if (empty($sub) === false) { - $menu_godmode['gagente']['text'] = __('Resources'); - $menu_godmode['gagente']['sec2'] = 'godmode/agentes/modificar_agente'; - $menu_godmode['gagente']['id'] = 'god-resources'; - $menu_godmode['gagente']['sub'] = $sub; -} - -$sub = []; -if ((bool) check_acl($config['id_user'], 0, 'PM') === true) { - $sub['godmode/groups/group_list']['text'] = __('Manage agents groups'); - $sub['godmode/groups/group_list']['id'] = 'Manage agents groups'; -} - -if ((bool) check_acl($config['id_user'], 0, 'PM') === true) { - // Tag. - $sub['godmode/tag/tag']['text'] = __('Module tags'); - $sub['godmode/tag/tag']['id'] = 'Module tags'; - $sub['godmode/tag/tag']['subsecs'] = 'godmode/tag/edit_tag'; - - enterprise_hook('enterprise_acl_submenu'); -} - -if ((bool) check_acl($config['id_user'], 0, 'UM') === true) { - $sub['godmode/users/user_list']['text'] = __('Users management'); - $sub['godmode/users/user_list']['id'] = 'Users management'; -} - -if ((bool) check_acl($config['id_user'], 0, 'PM') === true) { - $sub['godmode/users/profile_list']['text'] = __('Profile management'); - $sub['godmode/users/profile_list']['id'] = 'Profile management'; -} - -if (empty($sub) === false) { - $menu_godmode['gusuarios']['sub'] = $sub; - $menu_godmode['gusuarios']['text'] = __('Profiles'); - $menu_godmode['gusuarios']['sec2'] = 'godmode/users/user_list'; - $menu_godmode['gusuarios']['id'] = 'god-users'; -} - -$sub = []; -if ((bool) check_acl($config['id_user'], 0, 'PM') === true) { - $sub['templates']['text'] = __('Templates'); - $sub['templates']['id'] = 'Templates'; - $sub['templates']['type'] = 'direct'; - $sub['templates']['subtype'] = 'nolink'; - $sub2 = []; - $sub2['godmode/modules/manage_module_templates']['text'] = __('Module templates'); - $sub2['godmode/modules/manage_module_templates']['id'] = 'Module templates'; - $sub2['godmode/modules/private_enterprise_numbers']['text'] = __('Private Enterprise Numbers'); - $sub2['godmode/modules/private_enterprise_numbers']['id'] = 'Private Enterprise Numbers'; - $sub2['enterprise/godmode/modules/local_components']['text'] = __('Local components'); - $sub2['enterprise/godmode/modules/local_components']['id'] = 'Local components'; - $sub2['godmode/modules/manage_network_components']['text'] = __('Remote components'); - $sub2['godmode/modules/manage_network_components']['id'] = 'Network components'; - $sub['templates']['sub2'] = $sub2; - - enterprise_hook('inventory_submenu'); - enterprise_hook('autoconfiguration_menu'); - enterprise_hook('agent_repository_menu'); -} - -if ((bool) check_acl($config['id_user'], 0, 'AW') === true) { - enterprise_hook('policies_menu'); - enterprise_hook('agents_submenu'); -} - -if ((bool) check_acl($config['id_user'], 0, 'NW') === true) { - enterprise_hook('agents_ncm_submenu'); -} - -if ((bool) check_acl($config['id_user'], 0, 'AW') === true) { - $sub['gmassive']['text'] = __('Bulk operations'); - $sub['gmassive']['id'] = 'Bulk operations'; - $sub['gmassive']['type'] = 'direct'; - $sub['gmassive']['subtype'] = 'nolink'; - $sub2 = []; - $sub2['godmode/massive/massive_operations&tab=massive_agents']['text'] = __('Agents operations'); - $sub2['godmode/massive/massive_operations&tab=massive_modules']['text'] = __('Modules operations'); - $sub2['godmode/massive/massive_operations&tab=massive_plugins']['text'] = __('Plugins operations'); - if ((bool) check_acl($config['id_user'], 0, 'UM') === true) { - $sub2['godmode/massive/massive_operations&tab=massive_users']['text'] = __('Users operations'); - } - - $sub2['godmode/massive/massive_operations&tab=massive_alerts']['text'] = __('Alerts operations'); - enterprise_hook('massivepolicies_submenu'); - enterprise_hook('massivesnmp_submenu'); - enterprise_hook('massivesatellite_submenu'); - enterprise_hook('massiveservices_submenu'); - - $sub['gmassive']['sub2'] = $sub2; - $sub2 = []; -} - -if ((bool) check_acl($config['id_user'], 0, 'PM') === true || (bool) check_acl($config['id_user'], 0, 'UM') === true) { - $sub['godmode/groups/group_list&tab=credbox']['text'] = __('Credential store'); - $sub['godmode/groups/group_list&tab=credbox']['id'] = 'credential store'; -} - -// Manage events. -$sub2 = []; -if ((bool) check_acl($config['id_user'], 0, 'EW') === true || (bool) check_acl($config['id_user'], 0, 'EM') === true) { - // Custom event fields. - $sub2['godmode/events/events§ion=filter']['text'] = __('Event filters'); - $sub2['godmode/events/events§ion=filter']['id'] = 'Event filters'; -} - -if ((bool) check_acl($config['id_user'], 0, 'PM') === true) { - $sub2['godmode/events/events§ion=fields']['text'] = __('Custom columns'); - $sub2['godmode/events/events§ion=fields']['id'] = 'Custom events'; - $sub2['godmode/events/events§ion=responses']['text'] = __('Event responses'); - $sub2['godmode/events/events§ion=responses']['id'] = 'Event responses'; -} - -if (empty($sub2) === false) { - $sub['geventos']['text'] = __('Events'); - $sub['geventos']['id'] = 'events'; - $sub['geventos']['sec2'] = 'godmode/events/events§ion=filter'; - $sub['geventos']['type'] = 'direct'; - $sub['geventos']['subtype'] = 'nolink'; - $sub['geventos']['sub2'] = $sub2; -} - -if (empty($sub) === false) { - $menu_godmode['gmodules']['text'] = __('Configuration'); - $menu_godmode['gmodules']['sec2'] = 'godmode/modules/manage_network_templates'; - $menu_godmode['gmodules']['id'] = 'god-configuration'; - $menu_godmode['gmodules']['sub'] = $sub; -} - -if ((bool) check_acl($config['id_user'], 0, 'LW') === true - || (bool) check_acl($config['id_user'], 0, 'LM') === true - || (bool) check_acl($config['id_user'], 0, 'AD') === true -) { - $menu_godmode['galertas']['text'] = __('Alerts'); - $menu_godmode['galertas']['sec2'] = 'godmode/alerts/alert_list'; - $menu_godmode['galertas']['id'] = 'god-alerts'; - +if ($access_console_node === true) { $sub = []; - $sub['godmode/alerts/alert_list']['text'] = __('List of Alerts'); - $sub['godmode/alerts/alert_list']['id'] = 'List of Alerts'; - $sub['godmode/alerts/alert_list']['pages'] = ['godmode/alerts/alert_view']; - - if ((bool) check_acl($config['id_user'], 0, 'LM') === true) { - $sub['godmode/alerts/alert_templates']['text'] = __('Templates'); - $sub['godmode/alerts/alert_templates']['id'] = 'Templates'; - $sub['godmode/alerts/alert_templates']['pages'] = ['godmode/alerts/configure_alert_template']; - - $sub['godmode/alerts/alert_actions']['text'] = __('Actions'); - $sub['godmode/alerts/alert_actions']['id'] = 'Actions'; - $sub['godmode/alerts/alert_actions']['pages'] = ['godmode/alerts/configure_alert_action']; - $sub['godmode/alerts/alert_commands']['text'] = __('Commands'); - $sub['godmode/alerts/alert_commands']['id'] = 'Commands'; - $sub['godmode/alerts/alert_commands']['pages'] = ['godmode/alerts/configure_alert_command']; - $sub['godmode/alerts/alert_special_days']['text'] = __('Special days list'); - $sub['godmode/alerts/alert_special_days']['id'] = __('Special days list'); - $sub['godmode/alerts/alert_special_days']['pages'] = ['godmode/alerts/configure_alert_special_days']; - - enterprise_hook('eventalerts_submenu'); - $sub['godmode/snmpconsole/snmp_alert']['text'] = __('SNMP alerts'); - $sub['godmode/snmpconsole/snmp_alert']['id'] = 'SNMP alerts'; - enterprise_hook('alert_inventory_submenu'); + if ((bool) check_acl($config['id_user'], 0, 'AW') === true || (bool) check_acl($config['id_user'], 0, 'AD') === true) { + $sub['godmode/agentes/modificar_agente']['text'] = __('Manage agents'); + $sub['godmode/agentes/modificar_agente']['id'] = 'Manage agents'; + $sub['godmode/agentes/modificar_agente']['subsecs'] = ['godmode/agentes/configurar_agente']; } - $menu_godmode['galertas']['sub'] = $sub; -} - -if ((bool) check_acl($config['id_user'], 0, 'AW') === true || (bool) check_acl($config['id_user'], 0, 'PM') === true) { - // Servers. - $menu_godmode['gservers']['text'] = __('Servers'); - $menu_godmode['gservers']['sec2'] = 'godmode/servers/modificar_server'; - $menu_godmode['gservers']['id'] = 'god-servers'; - - $sub = []; - - if ((bool) check_acl($config['id_user'], 0, 'AW') === true) { - $sub['godmode/servers/modificar_server']['text'] = __('Manage servers'); - $sub['godmode/servers/modificar_server']['id'] = 'Manage servers'; - } - - // This subtabs are only for Pandora Admin. if ((bool) check_acl($config['id_user'], 0, 'PM') === true) { - enterprise_hook('ha_cluster'); + $sub['godmode/agentes/fields_manager']['text'] = __('Custom fields'); + $sub['godmode/agentes/fields_manager']['id'] = 'Custom fields'; - $sub['godmode/servers/plugin']['text'] = __('Plugins'); - $sub['godmode/servers/plugin']['id'] = 'Plugins'; + $sub['godmode/modules/manage_nc_groups']['text'] = __('Component groups'); + $sub['godmode/modules/manage_nc_groups']['id'] = 'Component groups'; + // Category. + $sub['godmode/category/category']['text'] = __('Module categories'); + $sub['godmode/category/category']['id'] = 'Module categories'; + $sub['godmode/category/category']['subsecs'] = 'godmode/category/edit_category'; - $sub['godmode/servers/plugin_registration']['text'] = __('Register Plugin'); - $sub['godmode/servers/plugin_registration']['id'] = 'register_plugin'; + $sub['godmode/modules/module_list']['text'] = __('Module types'); + $sub['godmode/modules/module_list']['id'] = 'Module types'; - enterprise_hook('export_target_submenu'); - - enterprise_hook('manage_satellite_submenu'); + $sub['godmode/groups/modu_group_list']['text'] = __('Module groups'); + $sub['godmode/groups/modu_group_list']['id'] = 'Module groups'; } - $menu_godmode['gservers']['sub'] = $sub; -} - -if ((bool) check_acl($config['id_user'], 0, 'PM') === true) { - // Setup. - $menu_godmode['gsetup']['text'] = __('Setup'); - $menu_godmode['gsetup']['sec2'] = 'general'; - $menu_godmode['gsetup']['id'] = 'god-setup'; - - $sub = []; - - // Options Setup. - $sub['general']['text'] = __('Setup'); - $sub['general']['id'] = 'Setup'; - $sub['general']['type'] = 'direct'; - $sub['general']['subtype'] = 'nolink'; - $sub2 = []; - - $sub2['godmode/setup/setup§ion=general']['text'] = __('General Setup'); - $sub2['godmode/setup/setup§ion=general']['id'] = 'General Setup'; - $sub2['godmode/setup/setup§ion=general']['refr'] = 0; - - enterprise_hook('password_submenu'); - enterprise_hook('enterprise_submenu'); - enterprise_hook('historydb_submenu'); - enterprise_hook('log_collector_submenu'); - - $sub2['godmode/setup/setup§ion=auth']['text'] = __('Authentication'); - $sub2['godmode/setup/setup§ion=auth']['refr'] = 0; - - $sub2['godmode/setup/setup§ion=perf']['text'] = __('Performance'); - $sub2['godmode/setup/setup§ion=perf']['refr'] = 0; - - $sub2['godmode/setup/setup§ion=vis']['text'] = __('Visual styles'); - $sub2['godmode/setup/setup§ion=vis']['refr'] = 0; - if ((bool) check_acl($config['id_user'], 0, 'AW') === true) { + // Netflow. if ((bool) $config['activate_netflow'] === true) { - $sub2['godmode/setup/setup§ion=net']['text'] = __('Netflow'); - $sub2['godmode/setup/setup§ion=net']['refr'] = 0; + $sub['godmode/netflow/nf_edit']['text'] = __('Netflow filters'); + $sub['godmode/netflow/nf_edit']['id'] = 'Netflow filters'; } } - $sub2['godmode/setup/setup§ion=ehorus']['text'] = __('eHorus'); - $sub2['godmode/setup/setup§ion=ehorus']['refr'] = 0; - - $sub2['godmode/setup/setup§ion=integria']['text'] = __('Integria IMS'); - $sub2['godmode/setup/setup§ion=integria']['refr'] = 0; - - enterprise_hook('module_library_submenu'); - - $sub2['godmode/setup/setup§ion=notifications']['text'] = __('Notifications'); - $sub2['godmode/setup/setup§ion=notifications']['refr'] = 0; - - $sub2['godmode/setup/setup§ion=websocket_engine']['text'] = __('Websocket Engine'); - $sub2['godmode/setup/setup§ion=websocket_engine']['refr'] = 0; - - $sub2['godmode/setup/setup§ion=external_tools']['text'] = __('External Tools'); - $sub2['godmode/setup/setup§ion=external_tools']['refr'] = 0; - - if ((bool) $config['activate_gis'] === true) { - $sub2['godmode/setup/setup§ion=gis']['text'] = __('Map conections GIS'); + if (empty($sub) === false) { + $menu_godmode['gagente']['text'] = __('Resources'); + $menu_godmode['gagente']['sec2'] = 'godmode/agentes/modificar_agente'; + $menu_godmode['gagente']['id'] = 'god-resources'; + $menu_godmode['gagente']['sub'] = $sub; } - $sub['general']['sub2'] = $sub2; - $sub['godmode/setup/os']['text'] = __('Edit OS'); - $sub['godmode/setup/os']['id'] = 'Edit OS'; - $sub['godmode/setup/license']['text'] = __('License'); - $sub['godmode/setup/license']['id'] = 'License'; + $sub = []; + if ((bool) check_acl($config['id_user'], 0, 'PM') === true) { + $sub['godmode/groups/group_list']['text'] = __('Manage agents groups'); + $sub['godmode/groups/group_list']['id'] = 'Manage agents groups'; + } - enterprise_hook('skins_submenu'); + if ((bool) check_acl($config['id_user'], 0, 'PM') === true) { + // Tag. + $sub['godmode/tag/tag']['text'] = __('Module tags'); + $sub['godmode/tag/tag']['id'] = 'Module tags'; + $sub['godmode/tag/tag']['subsecs'] = 'godmode/tag/edit_tag'; - $menu_godmode['gsetup']['sub'] = $sub; + enterprise_hook('enterprise_acl_submenu'); + } + + if ((bool) check_acl($config['id_user'], 0, 'UM') === true) { + $sub['godmode/users/user_list']['text'] = __('Users management'); + $sub['godmode/users/user_list']['id'] = 'Users management'; + } + + if ((bool) check_acl($config['id_user'], 0, 'PM') === true) { + $sub['godmode/users/profile_list']['text'] = __('Profile management'); + $sub['godmode/users/profile_list']['id'] = 'Profile management'; + } + + if (empty($sub) === false) { + $menu_godmode['gusuarios']['sub'] = $sub; + $menu_godmode['gusuarios']['text'] = __('Profiles'); + $menu_godmode['gusuarios']['sec2'] = 'godmode/users/user_list'; + $menu_godmode['gusuarios']['id'] = 'god-users'; + } + + $sub = []; + if ((bool) check_acl($config['id_user'], 0, 'PM') === true) { + $sub['templates']['text'] = __('Templates'); + $sub['templates']['id'] = 'Templates'; + $sub['templates']['type'] = 'direct'; + $sub['templates']['subtype'] = 'nolink'; + $sub2 = []; + $sub2['godmode/modules/manage_module_templates']['text'] = __('Module templates'); + $sub2['godmode/modules/manage_module_templates']['id'] = 'Module templates'; + $sub2['godmode/modules/private_enterprise_numbers']['text'] = __('Private Enterprise Numbers'); + $sub2['godmode/modules/private_enterprise_numbers']['id'] = 'Private Enterprise Numbers'; + $sub2['enterprise/godmode/modules/local_components']['text'] = __('Local components'); + $sub2['enterprise/godmode/modules/local_components']['id'] = 'Local components'; + $sub2['godmode/modules/manage_network_components']['text'] = __('Remote components'); + $sub2['godmode/modules/manage_network_components']['id'] = 'Network components'; + $sub['templates']['sub2'] = $sub2; + + enterprise_hook('inventory_submenu'); + enterprise_hook('autoconfiguration_menu'); + enterprise_hook('agent_repository_menu'); + } + + if ((bool) check_acl($config['id_user'], 0, 'AW') === true) { + enterprise_hook('policies_menu'); + enterprise_hook('agents_submenu'); + } + + if ((bool) check_acl($config['id_user'], 0, 'NW') === true) { + enterprise_hook('agents_ncm_submenu'); + } + + if ((bool) check_acl($config['id_user'], 0, 'AW') === true) { + $sub['gmassive']['text'] = __('Bulk operations'); + $sub['gmassive']['id'] = 'Bulk operations'; + $sub['gmassive']['type'] = 'direct'; + $sub['gmassive']['subtype'] = 'nolink'; + $sub2 = []; + $sub2['godmode/massive/massive_operations&tab=massive_agents']['text'] = __('Agents operations'); + $sub2['godmode/massive/massive_operations&tab=massive_modules']['text'] = __('Modules operations'); + $sub2['godmode/massive/massive_operations&tab=massive_plugins']['text'] = __('Plugins operations'); + if ((bool) check_acl($config['id_user'], 0, 'UM') === true) { + $sub2['godmode/massive/massive_operations&tab=massive_users']['text'] = __('Users operations'); + } + + $sub2['godmode/massive/massive_operations&tab=massive_alerts']['text'] = __('Alerts operations'); + enterprise_hook('massivepolicies_submenu'); + enterprise_hook('massivesnmp_submenu'); + enterprise_hook('massivesatellite_submenu'); + enterprise_hook('massiveservices_submenu'); + + $sub['gmassive']['sub2'] = $sub2; + $sub2 = []; + } + + if ((bool) check_acl($config['id_user'], 0, 'PM') === true || (bool) check_acl($config['id_user'], 0, 'UM') === true) { + $sub['godmode/groups/group_list&tab=credbox']['text'] = __('Credential store'); + $sub['godmode/groups/group_list&tab=credbox']['id'] = 'credential store'; + } + + // Manage events. + $sub2 = []; + if ((bool) check_acl($config['id_user'], 0, 'EW') === true || (bool) check_acl($config['id_user'], 0, 'EM') === true) { + // Custom event fields. + $sub2['godmode/events/events§ion=filter']['text'] = __('Event filters'); + $sub2['godmode/events/events§ion=filter']['id'] = 'Event filters'; + } + + if ((bool) check_acl($config['id_user'], 0, 'PM') === true) { + $sub2['godmode/events/events§ion=fields']['text'] = __('Custom columns'); + $sub2['godmode/events/events§ion=fields']['id'] = 'Custom events'; + $sub2['godmode/events/events§ion=responses']['text'] = __('Event responses'); + $sub2['godmode/events/events§ion=responses']['id'] = 'Event responses'; + } + + if (empty($sub2) === false) { + $sub['geventos']['text'] = __('Events'); + $sub['geventos']['id'] = 'events'; + $sub['geventos']['sec2'] = 'godmode/events/events§ion=filter'; + $sub['geventos']['type'] = 'direct'; + $sub['geventos']['subtype'] = 'nolink'; + $sub['geventos']['sub2'] = $sub2; + } + + if (empty($sub) === false) { + $menu_godmode['gmodules']['text'] = __('Configuration'); + $menu_godmode['gmodules']['sec2'] = 'godmode/modules/manage_network_templates'; + $menu_godmode['gmodules']['id'] = 'god-configuration'; + $menu_godmode['gmodules']['sub'] = $sub; + } + + if ((bool) check_acl($config['id_user'], 0, 'LW') === true + || (bool) check_acl($config['id_user'], 0, 'LM') === true + || (bool) check_acl($config['id_user'], 0, 'AD') === true + ) { + $menu_godmode['galertas']['text'] = __('Alerts'); + $menu_godmode['galertas']['sec2'] = 'godmode/alerts/alert_list'; + $menu_godmode['galertas']['id'] = 'god-alerts'; + + $sub = []; + $sub['godmode/alerts/alert_list']['text'] = __('List of Alerts'); + $sub['godmode/alerts/alert_list']['id'] = 'List of Alerts'; + $sub['godmode/alerts/alert_list']['pages'] = ['godmode/alerts/alert_view']; + + if ((bool) check_acl($config['id_user'], 0, 'LM') === true) { + $sub['godmode/alerts/alert_templates']['text'] = __('Templates'); + $sub['godmode/alerts/alert_templates']['id'] = 'Templates'; + $sub['godmode/alerts/alert_templates']['pages'] = ['godmode/alerts/configure_alert_template']; + + $sub['godmode/alerts/alert_actions']['text'] = __('Actions'); + $sub['godmode/alerts/alert_actions']['id'] = 'Actions'; + $sub['godmode/alerts/alert_actions']['pages'] = ['godmode/alerts/configure_alert_action']; + $sub['godmode/alerts/alert_commands']['text'] = __('Commands'); + $sub['godmode/alerts/alert_commands']['id'] = 'Commands'; + $sub['godmode/alerts/alert_commands']['pages'] = ['godmode/alerts/configure_alert_command']; + $sub['godmode/alerts/alert_special_days']['text'] = __('Special days list'); + $sub['godmode/alerts/alert_special_days']['id'] = __('Special days list'); + $sub['godmode/alerts/alert_special_days']['pages'] = ['godmode/alerts/configure_alert_special_days']; + + enterprise_hook('eventalerts_submenu'); + $sub['godmode/snmpconsole/snmp_alert']['text'] = __('SNMP alerts'); + $sub['godmode/snmpconsole/snmp_alert']['id'] = 'SNMP alerts'; + enterprise_hook('alert_inventory_submenu'); + } + + $menu_godmode['galertas']['sub'] = $sub; + } + + if ((bool) check_acl($config['id_user'], 0, 'AW') === true || (bool) check_acl($config['id_user'], 0, 'PM') === true) { + // Servers. + $menu_godmode['gservers']['text'] = __('Servers'); + $menu_godmode['gservers']['sec2'] = 'godmode/servers/modificar_server'; + $menu_godmode['gservers']['id'] = 'god-servers'; + + $sub = []; + + if ((bool) check_acl($config['id_user'], 0, 'AW') === true) { + $sub['godmode/servers/modificar_server']['text'] = __('Manage servers'); + $sub['godmode/servers/modificar_server']['id'] = 'Manage servers'; + } + + // This subtabs are only for Pandora Admin. + if ((bool) check_acl($config['id_user'], 0, 'PM') === true) { + enterprise_hook('ha_cluster'); + + $sub['godmode/servers/plugin']['text'] = __('Plugins'); + $sub['godmode/servers/plugin']['id'] = 'Plugins'; + + $sub['godmode/servers/plugin_registration']['text'] = __('Register Plugin'); + $sub['godmode/servers/plugin_registration']['id'] = 'register_plugin'; + + enterprise_hook('export_target_submenu'); + + enterprise_hook('manage_satellite_submenu'); + } + + $menu_godmode['gservers']['sub'] = $sub; + } + + if ((bool) check_acl($config['id_user'], 0, 'PM') === true) { + // Setup. + $menu_godmode['gsetup']['text'] = __('Setup'); + $menu_godmode['gsetup']['sec2'] = 'general'; + $menu_godmode['gsetup']['id'] = 'god-setup'; + + $sub = []; + + // Options Setup. + $sub['general']['text'] = __('Setup'); + $sub['general']['id'] = 'Setup'; + $sub['general']['type'] = 'direct'; + $sub['general']['subtype'] = 'nolink'; + $sub2 = []; + + $sub2['godmode/setup/setup§ion=general']['text'] = __('General Setup'); + $sub2['godmode/setup/setup§ion=general']['id'] = 'General Setup'; + $sub2['godmode/setup/setup§ion=general']['refr'] = 0; + + enterprise_hook('password_submenu'); + enterprise_hook('enterprise_submenu'); + enterprise_hook('historydb_submenu'); + enterprise_hook('log_collector_submenu'); + + $sub2['godmode/setup/setup§ion=auth']['text'] = __('Authentication'); + $sub2['godmode/setup/setup§ion=auth']['refr'] = 0; + + $sub2['godmode/setup/setup§ion=perf']['text'] = __('Performance'); + $sub2['godmode/setup/setup§ion=perf']['refr'] = 0; + + $sub2['godmode/setup/setup§ion=vis']['text'] = __('Visual styles'); + $sub2['godmode/setup/setup§ion=vis']['refr'] = 0; + + if ((bool) check_acl($config['id_user'], 0, 'AW') === true) { + if ((bool) $config['activate_netflow'] === true) { + $sub2['godmode/setup/setup§ion=net']['text'] = __('Netflow'); + $sub2['godmode/setup/setup§ion=net']['refr'] = 0; + } + } + + $sub2['godmode/setup/setup§ion=ehorus']['text'] = __('eHorus'); + $sub2['godmode/setup/setup§ion=ehorus']['refr'] = 0; + + $sub2['godmode/setup/setup§ion=integria']['text'] = __('Integria IMS'); + $sub2['godmode/setup/setup§ion=integria']['refr'] = 0; + + enterprise_hook('module_library_submenu'); + + $sub2['godmode/setup/setup§ion=notifications']['text'] = __('Notifications'); + $sub2['godmode/setup/setup§ion=notifications']['refr'] = 0; + + $sub2['godmode/setup/setup§ion=websocket_engine']['text'] = __('Websocket Engine'); + $sub2['godmode/setup/setup§ion=websocket_engine']['refr'] = 0; + + $sub2['godmode/setup/setup§ion=external_tools']['text'] = __('External Tools'); + $sub2['godmode/setup/setup§ion=external_tools']['refr'] = 0; + + if ((bool) $config['activate_gis'] === true) { + $sub2['godmode/setup/setup§ion=gis']['text'] = __('Map conections GIS'); + } + + $sub['general']['sub2'] = $sub2; + $sub['godmode/setup/os']['text'] = __('Edit OS'); + $sub['godmode/setup/os']['id'] = 'Edit OS'; + $sub['godmode/setup/license']['text'] = __('License'); + $sub['godmode/setup/license']['id'] = 'License'; + + enterprise_hook('skins_submenu'); + + $menu_godmode['gsetup']['sub'] = $sub; + } } + if ((bool) check_acl($config['id_user'], 0, 'PM') === true || (bool) check_acl($config['id_user'], 0, 'DM') === true) { $menu_godmode['gextensions']['text'] = __('Admin tools'); $menu_godmode['gextensions']['sec2'] = 'godmode/extensions'; @@ -392,142 +400,148 @@ if ((bool) check_acl($config['id_user'], 0, 'PM') === true || (bool) check_acl($ $sub = []; if ((bool) check_acl($config['id_user'], 0, 'PM') === true) { - // Audit //meter en extensiones. - $sub['godmode/audit_log']['text'] = __('System audit log'); - $sub['godmode/audit_log']['id'] = 'System audit log'; - $sub['godmode/setup/links']['text'] = __('Links'); - $sub['godmode/setup/links']['id'] = 'Links'; - $sub['tools/diagnostics']['text'] = __('Diagnostic info'); - $sub['tools/diagnostics']['id'] = 'Diagnostic info'; - enterprise_hook('omnishell'); - enterprise_hook('ipam_submenu'); + if ($access_console_node === true) { + // Audit //meter en extensiones. + $sub['godmode/audit_log']['text'] = __('System audit log'); + $sub['godmode/audit_log']['id'] = 'System audit log'; + $sub['godmode/setup/links']['text'] = __('Links'); + $sub['godmode/setup/links']['id'] = 'Links'; + $sub['tools/diagnostics']['text'] = __('Diagnostic info'); + $sub['tools/diagnostics']['id'] = 'Diagnostic info'; + enterprise_hook('omnishell'); + enterprise_hook('ipam_submenu'); + + $sub['godmode/setup/news']['text'] = __('Site news'); + $sub['godmode/setup/news']['id'] = 'Site news'; + } - $sub['godmode/setup/news']['text'] = __('Site news'); - $sub['godmode/setup/news']['id'] = 'Site news'; $sub['godmode/setup/file_manager']['text'] = __('File manager'); $sub['godmode/setup/file_manager']['id'] = 'File manager'; - if (is_user_admin($config['id_user']) === true) { - $sub['extensions/db_status']['text'] = __('DB Schema Check'); - $sub['extensions/db_status']['id'] = 'DB Schema Check'; - $sub['extensions/db_status']['sec'] = 'gbman'; - $sub['extensions/dbmanager']['text'] = __('DB Interface'); - $sub['extensions/dbmanager']['id'] = 'DB Interface'; - $sub['extensions/dbmanager']['sec'] = 'gbman'; - enterprise_hook('dbBackupManager'); - enterprise_hook('elasticsearch_interface_menu'); + if ($access_console_node === true) { + if (is_user_admin($config['id_user']) === true) { + $sub['extensions/db_status']['text'] = __('DB Schema Check'); + $sub['extensions/db_status']['id'] = 'DB Schema Check'; + $sub['extensions/db_status']['sec'] = 'gbman'; + $sub['extensions/dbmanager']['text'] = __('DB Interface'); + $sub['extensions/dbmanager']['id'] = 'DB Interface'; + $sub['extensions/dbmanager']['sec'] = 'gbman'; + enterprise_hook('dbBackupManager'); + enterprise_hook('elasticsearch_interface_menu'); + } } } $menu_godmode['gextensions']['sub'] = $sub; } -if (is_array($config['extensions']) === true) { - $sub = []; - $sub2 = []; +if ($access_console_node === true) { + if (is_array($config['extensions']) === true) { + $sub = []; + $sub2 = []; - foreach ($config['extensions'] as $extension) { - // If no godmode_menu is a operation extension. - if (empty($extension['godmode_menu']) === true) { - continue; - } + foreach ($config['extensions'] as $extension) { + // If no godmode_menu is a operation extension. + if (empty($extension['godmode_menu']) === true) { + continue; + } - if ($extension['godmode_menu']['name'] === 'System Info') { - continue; - } + if ($extension['godmode_menu']['name'] === 'System Info') { + continue; + } - if ($extension['godmode_menu']['name'] !== __('DB Schema check') && $extension['godmode_menu']['name'] !== __('DB interface')) { - $extmenu = $extension['godmode_menu']; - } + if ($extension['godmode_menu']['name'] !== __('DB Schema check') && $extension['godmode_menu']['name'] !== __('DB interface')) { + $extmenu = $extension['godmode_menu']; + } - // Check the ACL for this user. - if ((bool) check_acl($config['id_user'], 0, $extmenu['acl']) === false) { - continue; - } + // Check the ACL for this user. + if ((bool) check_acl($config['id_user'], 0, $extmenu['acl']) === false) { + continue; + } - // Check if was displayed inside other menu. - if (empty($extension['godmode_menu']['fatherId']) === true) { - $sub2[$extmenu['sec2']]['text'] = __($extmenu['name']); - $sub2[$extmenu['sec2']]['id'] = $extmenu['name']; - $sub2[$extmenu['sec2']]['refr'] = 0; - } else { - if (is_array($extmenu) === true && array_key_exists('fatherId', $extmenu) === true) { - if (strlen($extmenu['fatherId']) > 0) { - if (array_key_exists('subfatherId', $extmenu) === true) { - if (strlen($extmenu['subfatherId']) > 0) { - $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['subfatherId']]['sub2'][$extmenu['sec2']]['text'] = __($extmenu['name']); - $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['subfatherId']]['sub2'][$extmenu['sec2']]['id'] = $extmenu['name']; - $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['subfatherId']]['sub2'][$extmenu['sec2']]['refr'] = 0; - $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['subfatherId']]['sub2'][$extmenu['sec2']]['icon'] = $extmenu['icon']; - $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['subfatherId']]['sub2'][$extmenu['sec2']]['sec'] = 'extensions'; - $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['subfatherId']]['sub2'][$extmenu['sec2']]['extension'] = true; - $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['subfatherId']]['sub2'][$extmenu['sec2']]['enterprise'] = $extension['enterprise']; - $menu_godmode[$extmenu['fatherId']]['hasExtensions'] = true; + // Check if was displayed inside other menu. + if (empty($extension['godmode_menu']['fatherId']) === true) { + $sub2[$extmenu['sec2']]['text'] = __($extmenu['name']); + $sub2[$extmenu['sec2']]['id'] = $extmenu['name']; + $sub2[$extmenu['sec2']]['refr'] = 0; + } else { + if (is_array($extmenu) === true && array_key_exists('fatherId', $extmenu) === true) { + if (strlen($extmenu['fatherId']) > 0) { + if (array_key_exists('subfatherId', $extmenu) === true) { + if (strlen($extmenu['subfatherId']) > 0) { + $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['subfatherId']]['sub2'][$extmenu['sec2']]['text'] = __($extmenu['name']); + $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['subfatherId']]['sub2'][$extmenu['sec2']]['id'] = $extmenu['name']; + $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['subfatherId']]['sub2'][$extmenu['sec2']]['refr'] = 0; + $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['subfatherId']]['sub2'][$extmenu['sec2']]['icon'] = $extmenu['icon']; + $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['subfatherId']]['sub2'][$extmenu['sec2']]['sec'] = 'extensions'; + $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['subfatherId']]['sub2'][$extmenu['sec2']]['extension'] = true; + $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['subfatherId']]['sub2'][$extmenu['sec2']]['enterprise'] = $extension['enterprise']; + $menu_godmode[$extmenu['fatherId']]['hasExtensions'] = true; + } else { + $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['sec2']]['text'] = __($extmenu['name']); + $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['sec2']]['id'] = $extmenu['name']; + $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['sec2']]['refr'] = 0; + $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['sec2']]['icon'] = $extmenu['icon']; + $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['sec2']]['sec'] = $extmenu['fatherId']; + $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['sec2']]['extension'] = true; + $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['sec2']]['enterprise'] = $extension['enterprise']; + $menu_godmode[$extmenu['fatherId']]['hasExtensions'] = true; + } } else { $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['sec2']]['text'] = __($extmenu['name']); $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['sec2']]['id'] = $extmenu['name']; $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['sec2']]['refr'] = 0; $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['sec2']]['icon'] = $extmenu['icon']; - $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['sec2']]['sec'] = $extmenu['fatherId']; + $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['sec2']]['sec'] = 'gextensions'; $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['sec2']]['extension'] = true; $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['sec2']]['enterprise'] = $extension['enterprise']; $menu_godmode[$extmenu['fatherId']]['hasExtensions'] = true; } - } else { - $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['sec2']]['text'] = __($extmenu['name']); - $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['sec2']]['id'] = $extmenu['name']; - $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['sec2']]['refr'] = 0; - $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['sec2']]['icon'] = $extmenu['icon']; - $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['sec2']]['sec'] = 'gextensions'; - $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['sec2']]['extension'] = true; - $menu_godmode[$extmenu['fatherId']]['sub'][$extmenu['sec2']]['enterprise'] = $extension['enterprise']; - $menu_godmode[$extmenu['fatherId']]['hasExtensions'] = true; } } } } - } - // Complete the submenu. - $extension_view = []; - $extension_view['godmode/extensions']['id'] = 'Extension manager view'; - $extension_view['godmode/extensions']['text'] = __('Extension manager view'); - $extension_submenu = array_merge($extension_view, $sub2); + // Complete the submenu. + $extension_view = []; + $extension_view['godmode/extensions']['id'] = 'Extension manager view'; + $extension_view['godmode/extensions']['text'] = __('Extension manager view'); + $extension_submenu = array_merge($extension_view, $sub2); - $sub['godmode/extensions']['sub2'] = $extension_submenu; - $sub['godmode/extensions']['text'] = __('Extension manager'); - $sub['godmode/extensions']['id'] = 'Extension manager'; - $sub['godmode/extensions']['type'] = 'direct'; - $sub['godmode/extensions']['subtype'] = 'nolink'; + $sub['godmode/extensions']['sub2'] = $extension_submenu; + $sub['godmode/extensions']['text'] = __('Extension manager'); + $sub['godmode/extensions']['id'] = 'Extension manager'; + $sub['godmode/extensions']['type'] = 'direct'; + $sub['godmode/extensions']['subtype'] = 'nolink'; - if (is_array($menu_godmode['gextensions']['sub']) === true) { - $submenu = array_merge($menu_godmode['gextensions']['sub'], $sub); - if ($menu_godmode['gextensions']['sub'] != null) { - $menu_godmode['gextensions']['sub'] = $submenu; + if (is_array($menu_godmode['gextensions']['sub']) === true) { + $submenu = array_merge($menu_godmode['gextensions']['sub'], $sub); + if ($menu_godmode['gextensions']['sub'] != null) { + $menu_godmode['gextensions']['sub'] = $submenu; + } } } + + $menu_godmode['links']['text'] = __('Links'); + $menu_godmode['links']['sec2'] = ''; + $menu_godmode['links']['id'] = 'god-links'; + + $sub = []; + $rows = db_get_all_rows_in_table('tlink', 'name'); + foreach ($rows as $row) { + // Audit //meter en extensiones. + $sub[$row['link']]['text'] = $row['name']; + $sub[$row['link']]['id'] = $row['name']; + $sub[$row['link']]['type'] = 'direct'; + $sub[$row['link']]['subtype'] = 'new_blank'; + } + + $menu_godmode['links']['sub'] = $sub; } -$menu_godmode['links']['text'] = __('Links'); -$menu_godmode['links']['sec2'] = ''; -$menu_godmode['links']['id'] = 'god-links'; - -$sub = []; -$rows = db_get_all_rows_in_table('tlink', 'name'); -foreach ($rows as $row) { - // Audit //meter en extensiones. - $sub[$row['link']]['text'] = $row['name']; - $sub[$row['link']]['id'] = $row['name']; - $sub[$row['link']]['type'] = 'direct'; - $sub[$row['link']]['subtype'] = 'new_blank'; -} - -$menu_godmode['links']['sub'] = $sub; - // Warp Manager. if ((bool) check_acl($config['id_user'], 0, 'PM') === true && (bool) $config['enable_update_manager'] === true) { $menu_godmode['messages']['text'] = __('Warp Update'); - ; $menu_godmode['messages']['id'] = 'god-um_messages'; $menu_godmode['messages']['sec2'] = ''; @@ -547,19 +561,21 @@ if ((bool) check_acl($config['id_user'], 0, 'PM') === true && (bool) $config['en $menu_godmode['messages']['sub'] = $sub; } -// Module library. -if ((bool) check_acl($config['id_user'], 0, 'AR') === true) { - $menu_godmode['gmodule_library']['text'] = __('Module library'); - $menu_godmode['gmodule_library']['id'] = 'god-module_library'; +if ($access_console_node === true) { + // Module library. + if ((bool) check_acl($config['id_user'], 0, 'AR') === true) { + $menu_godmode['gmodule_library']['text'] = __('Module library'); + $menu_godmode['gmodule_library']['id'] = 'god-module_library'; - $sub = []; - $sub['godmode/module_library/module_library_view']['text'] = __('View'); - $sub['godmode/module_library/module_library_view']['id'] = 'View'; + $sub = []; + $sub['godmode/module_library/module_library_view']['text'] = __('View'); + $sub['godmode/module_library/module_library_view']['id'] = 'View'; - $sub['godmode/module_library/module_library_view&tab=categories']['text'] = __('Categories'); - $sub['godmode/module_library/module_library_view&tab=categories']['id'] = 'categories'; + $sub['godmode/module_library/module_library_view&tab=categories']['text'] = __('Categories'); + $sub['godmode/module_library/module_library_view&tab=categories']['id'] = 'categories'; - $menu_godmode['gmodule_library']['sub'] = $sub; + $menu_godmode['gmodule_library']['sub'] = $sub; + } } if ((bool) $config['pure'] === false) { diff --git a/pandora_console/godmode/servers/discovery.php b/pandora_console/godmode/servers/discovery.php index 7fceb324f9..5ae4f2fcfd 100755 --- a/pandora_console/godmode/servers/discovery.php +++ b/pandora_console/godmode/servers/discovery.php @@ -158,6 +158,12 @@ if ($classname_selected === null) { // Load classes and print selector. $wiz_data = []; foreach ($classes as $classpath) { + if (is_reporting_console_node() === true) { + if ($classpath !== '/var/www/html/pandora_console/godmode/wizards/DiscoveryTaskList.class.php') { + continue; + } + } + $classname = basename($classpath, '.class.php'); $obj = new $classname(); diff --git a/pandora_console/godmode/servers/modificar_server.php b/pandora_console/godmode/servers/modificar_server.php index b4fcf95fcc..34524c6aa7 100644 --- a/pandora_console/godmode/servers/modificar_server.php +++ b/pandora_console/godmode/servers/modificar_server.php @@ -122,26 +122,44 @@ if (isset($_GET['server'])) { $buttons = ''; - if ($server_type !== 13) { - // Buttons. - $buttons = [ - 'standard_editor' => [ - 'active' => false, - 'text' => '<a href="index.php?sec=gservers&sec2=godmode/servers/modificar_server&server_remote='.$id_server.'&ext='.$ext.'&tab=standard_editor&pure='.$pure.'">'.html_print_image('images/list.png', true, ['title' => __('Standard editor')]).'</a>', - ], - 'advanced_editor' => [ - 'active' => false, - 'text' => '<a href="index.php?sec=gservers&sec2=godmode/servers/modificar_server&server_remote='.$id_server.'&ext='.$ext.'&tab=advanced_editor&pure='.$pure.'">'.html_print_image('images/pen.png', true, ['title' => __('Advanced editor')]).'</a>', - ], - ]; + // Buttons. + $buttons = [ + 'standard_editor' => [ + 'active' => false, + 'text' => '<a href="index.php?sec=gservers&sec2=godmode/servers/modificar_server&server_remote='.$id_server.'&ext='.$ext.'&tab=standard_editor&pure='.$pure.'">'.html_print_image('images/list.png', true, ['title' => __('Standard editor')]).'</a>', + ], + 'advanced_editor' => [ + 'active' => false, + 'text' => '<a href="index.php?sec=gservers&sec2=godmode/servers/modificar_server&server_remote='.$id_server.'&ext='.$ext.'&tab=advanced_editor&pure='.$pure.'">'.html_print_image('images/pen.png', true, ['title' => __('Advanced editor')]).'</a>', + ], + ]; - $buttons[$tab]['active'] = true; + if ($server_type === SERVER_TYPE_ENTERPRISE_SATELLITE) { + $buttons['agent_editor'] = [ + 'active' => false, + 'text' => '<a href="index.php?sec=gservers&sec2=godmode/servers/modificar_server&server_remote='.$id_server.'&ext='.$ext.'&tab=agent_editor&pure='.$pure.'">'.html_print_image('images/agent.png', true, ['title' => __('Advanced editor')]).'</a>', + + ]; } + $buttons[$tab]['active'] = true; + ui_print_page_header(__('Remote Configuration'), 'images/gm_servers.png', false, 'servers', true, $buttons); - if ($server_type !== 13 && $tab == 'standard_editor') { + if ($tab === 'standard_editor') { $advanced_editor = false; + + if ($server_type === 13) { + echo "<table cellpadding='4' cellspacing='4' class='databox filters font_bold margin-bottom-10' width='100%'> + <tr>"; + echo '<td class="w100p">'; + echo __('Dynamic search').' '; + html_print_input_text('search_config_token', $search, '', 12); + echo '</td>'; + echo '</tr></table>'; + } + } else if ($tab === 'agent_editor' && $server_type === SERVER_TYPE_ENTERPRISE_SATELLITE) { + $advanced_editor = 'agent_editor'; } enterprise_include('godmode/servers/server_disk_conf_editor.php'); diff --git a/pandora_console/godmode/setup/setup_general.php b/pandora_console/godmode/setup/setup_general.php index 972075f61c..35eaddd2c3 100644 --- a/pandora_console/godmode/setup/setup_general.php +++ b/pandora_console/godmode/setup/setup_general.php @@ -497,6 +497,17 @@ $table->data[$i++][1] = html_print_checkbox_switch( true ); +$table->data[$i][0] = __('Enable console report').ui_print_help_tip( + __('Enable console report'), + true +); +$table->data[$i++][1] = html_print_checkbox_switch( + 'reporting_console_enable', + 1, + $config['reporting_console_enable'], + true +); + echo '<form id="form_setup" method="post" action="index.php?sec=gsetup&sec2=godmode/setup/setup&section=general&pure='.$config['pure'].'">'; echo '<fieldset>'; diff --git a/pandora_console/godmode/wizards/DiscoveryTaskList.class.php b/pandora_console/godmode/wizards/DiscoveryTaskList.class.php index af7eb1d47e..5388aa9a45 100644 --- a/pandora_console/godmode/wizards/DiscoveryTaskList.class.php +++ b/pandora_console/godmode/wizards/DiscoveryTaskList.class.php @@ -162,7 +162,9 @@ class DiscoveryTaskList extends HTML $ret = false; } - $ret2 = $this->showList(); + if (is_reporting_console_node() === false) { + $ret2 = $this->showList(); + } if ($ret === false && $ret2 === false) { include_once $config['homedir'].'/general/first_task/recon_view.php'; diff --git a/pandora_console/include/ajax/events.php b/pandora_console/include/ajax/events.php index d61206f710..0618ae83c3 100644 --- a/pandora_console/include/ajax/events.php +++ b/pandora_console/include/ajax/events.php @@ -90,6 +90,7 @@ $node_id = (int) get_parameter('node_id', 0); if ($get_comments === true) { $event = get_parameter('event', false); + $event_rep = get_parameter('event_rep', false); if ($event === false) { return __('Failed to retrieve comments'); } @@ -97,27 +98,29 @@ if ($get_comments === true) { $eventsGrouped = []; // Consider if the event is grouped. $whereGrouped = '1=1'; - // Default grouped message filtering (evento and estado). - $whereGrouped = sprintf( - '`evento` = "%s" AND `estado` = "%s" AND `event_type` = "%s" ', - $event['evento'], - $event['estado'], - $event['event_type'] - ); - - // If id_agente is reported, filter the messages by them as well. - if ((int) $event['id_agente'] > 0) { - $whereGrouped .= sprintf( - ' AND `id_agente` = %d', - (int) $event['id_agente'] + if (isset($event_rep) === true && $event_rep > 0) { + // Default grouped message filtering (evento and estado). + $whereGrouped = sprintf( + '`evento` = "%s"', + $event['evento'] ); - } - if ((int) $event['id_agentmodule'] > 0) { - $whereGrouped .= sprintf( - ' AND `id_agentmodule` = %d', - (int) $event['id_agentmodule'] - ); + // If id_agente is reported, filter the messages by them as well. + if ((int) $event['id_agente'] > 0) { + $whereGrouped .= sprintf( + ' AND `id_agente` = %d', + (int) $event['id_agente'] + ); + } + + if ((int) $event['id_agentmodule'] > 0) { + $whereGrouped .= sprintf( + ' AND `id_agentmodule` = %d', + (int) $event['id_agentmodule'] + ); + } + } else { + $whereGrouped = sprintf('`id_evento` = %d', $event['id_evento']); } try { @@ -1629,7 +1632,7 @@ if ($get_extended_event) { $filter = get_parameter('filter', []); $similar_ids = get_parameter('similar_ids', $event_id); $group_rep = $filter['group_rep']; - $event_rep = $event['event_rep']; + $event_rep = $group_rep; $timestamp_first = $event['timestamp_first']; $timestamp_last = $event['timestamp_last']; $server_id = $event['server_id']; @@ -1964,7 +1967,8 @@ if ($get_extended_event) { data : { page: "include/ajax/events", get_comments: 1, - event: '.json_encode($event).' + event: '.json_encode($event).', + event_rep: '.$event_rep.' }, dataType : "html", success: function (data) { diff --git a/pandora_console/include/class/SatelliteAgent.class.php b/pandora_console/include/class/SatelliteAgent.class.php new file mode 100644 index 0000000000..f1c187afdf --- /dev/null +++ b/pandora_console/include/class/SatelliteAgent.class.php @@ -0,0 +1,768 @@ +<?php +// phpcs:disable Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps +/** + * Controller for Audit Logs + * + * @category Controller + * @package Pandora FMS + * @subpackage Community + * @version 1.0.0 + * @license See below + * + * ______ ___ _______ _______ ________ + * | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __| + * | __/| _ | | _ || _ | _| _ | | ___| |__ | + * |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______| + * + * ============================================================================ + * Copyright (c) 2005-2022 Artica Soluciones Tecnologicas + * Please see http://pandorafms.org for full contribution list + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation for version 2. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * ============================================================================ + */ + +use Mpdf\Tag\Address; +use PandoraFMS\Agent as PandoraFMSAgent; +use PandoraFMS\Enterprise\Agent; + +use function Composer\Autoload\includeFile; + +// Begin. +global $config; + +// Necessary classes for extends. +require_once $config['homedir'].'/include/class/HTML.class.php'; +require_once $config['homedir'].'/include/functions_servers.php'; +enterprise_include_once('include/functions_satellite.php'); + +/** + * Class SatelliteAgent + */ +class SatelliteAgent extends HTML +{ + + /** + * Allowed methods to be called using AJAX request. + * + * @var array + */ + public $AJAXMethods = [ + 'draw', + 'addAgent', + 'deleteAgent', + 'loadModal', + ]; + + /** + * Ajax page. + * + * @var string + */ + private $ajaxController; + + + /** + * Class constructor + * + * @param string $ajaxController Ajax controller. + */ + public function __construct(string $ajaxController) + { + global $config; + + check_login(); + + if (check_acl($config['id_user'], 0, 'PM') === false + && is_user_admin($config['id_user']) === true + ) { + db_pandora_audit( + AUDIT_LOG_ACL_VIOLATION, + 'Trying to access Satellite agents' + ); + include 'general/noaccess.php'; + return; + } + + // Set the ajax controller. + $this->ajaxController = $ajaxController; + // Capture all parameters before start. + $this->satellite_server = (int) get_parameter('server_remote'); + if ($this->satellite_server !== 0) { + $this->satellite_name = servers_get_name($this->satellite_server); + $this->satellite_config = (array) config_satellite_get_config_file($this->satellite_name); + } + + } + + + /** + * Run view + * + * @return void + */ + public function run() + { + // Javascript. + ui_require_jquery_file('pandora'); + // CSS. + ui_require_css_file('wizard'); + ui_require_css_file('discovery'); + + global $config; + // Datatables list. + try { + $columns = [ + 'name', + 'address', + 'actions', + ]; + + $column_names = [ + __('Agent Name'), + __('IP Adrress'), + __('Actions'), + ]; + + $this->tableId = 'satellite_agents'; + + if (is_metaconsole() === true) { + // Only in case of Metaconsole, format the frame. + open_meta_frame(); + } + + // Load datatables user interface. + ui_print_datatable( + [ + 'id' => $this->tableId, + 'class' => 'info_table', + 'style' => 'width: 100%', + 'columns' => $columns, + 'column_names' => $column_names, + 'ajax_url' => $this->ajaxController, + 'ajax_data' => [ + 'method' => 'draw', + 'server_remote' => $this->satellite_server, + ], + 'ajax_postprocces' => 'process_datatables_item(item)', + 'no_sortable_columns' => [ + 0, + 1, + 2, + ], + 'search_button_class' => 'sub filter float-right', + 'form' => [ + 'inputs' => [ + [ + 'label' => __('Search').ui_print_help_tip( + __('Search filter by alias, name, description, IP address or custom fields content'), + true + ), + 'type' => 'text', + 'name' => 'filter_search', + 'size' => 12, + ], + + ], + ], + ] + ); + } catch (Exception $e) { + echo $e->getMessage(); + } + + if (is_metaconsole() === true) { + // Close the frame. + close_meta_frame(); + } + + // Auxiliar div. + $modal = '<div id="modal" class="invisible"></div>'; + $msg = '<div id="msg" class="invisible"></div>'; + $aux = '<div id="aux" class="invisible"></div>'; + + echo $modal.$msg.$aux; + + // Create button. + echo '<div class="w100p flex-content-right">'; + html_print_submit_button( + __('Add host'), + 'create', + false, + 'class="sub next"' + ); + + echo '</div>'; + // Load own javascript file. + echo $this->loadJS(); + + } + + + /** + * Get the data for draw the table. + * + * @return void. + */ + public function draw() + { + global $config; + // Initialice filter. + $filter = '1=1'; + // Init data. + $data = []; + // Count of total records. + $count = 0; + // Catch post parameters. + $start = get_parameter('start', 0); + $length = get_parameter('length', $config['block_size']); + $order = get_datatable_order(true); + $filters = get_parameter('filter', []); + + try { + ob_start(); + $data = []; + + foreach ($this->satellite_config as $line) { + $re = '/^#*add_host \b(\S+) (\S*)$/m'; + + if (preg_match($re, $line, $matches, PREG_OFFSET_CAPTURE, 0) > 0) { + $agent['address'] = $matches[1][0]; + if (isset($matches[2][0]) === false || empty($matches[2][0]) === true) { + $agent['name'] = ''; + } else { + $agent['name'] = $matches[2][0]; + } + + if (empty($filters['filter_search']) === false) { + if (empty(preg_grep('/'.$filters['filter_search'].'?/mi', array_values($agent))) === true) { + continue; + } + } + + array_push($data, $agent); + } + } + + if (empty($data) === false) { + $data = array_reduce( + $data, + function ($carry, $item) { + global $config; + // Transforms array of arrays $data into an array + // of objects, making a post-process of certain fields. + $tmp = (object) $item; + + $tmp->actions .= html_print_image( + 'images/cross.png', + true, + [ + 'border' => '0', + 'class' => 'action_button_img invert_filter', + 'onclick' => 'delete_agent(\''.$tmp->address.'\',\''.$tmp->name.'\')', + ] + ); + + $carry[] = $tmp; + return $carry; + } + ); + } + + $data = array_slice($data, $start, $length, true); + $total = count($data); + + echo json_encode( + [ + 'data' => $data, + 'recordsTotal' => $total, + 'recordsFiltered' => $total, + ] + ); + // Capture output. + $response = ob_get_clean(); + } catch (Exception $e) { + echo json_encode(['error' => $e->getMessage()]); + exit; + } + + // If not valid, show error with issue. + json_decode($response); + if (json_last_error() == JSON_ERROR_NONE) { + // If valid dump. + echo $response; + } else { + echo json_encode( + ['error' => $response] + ); + } + + exit; + } + + + /** + * Prints inputs for modal "Add agent". + * + * @return void + */ + public function loadModal() + { + $values['address'] = get_parameter('address', null); + $values['name'] = get_parameter('name', null); + + echo $this->printInputs($values); + } + + + /** + * Generates inputs for new/update agents. + * + * @param array $values Values or null. + * + * @return string Inputs. + */ + public function printInputs($values=null) + { + if (!is_array($values)) { + $values = []; + } + + $return_all_group = false; + + if (users_can_manage_group_all('AR') === true) { + $return_all_group = true; + } + + $form = [ + 'action' => '#', + 'id' => 'modal_form', + 'onsubmit' => 'return false;', + 'class' => 'modal', + ]; + + $inputs = []; + + $inputs[] = [ + 'label' => __('Agent address'), + 'id' => 'div-identifier', + 'arguments' => [ + 'name' => 'address', + 'type' => 'text', + 'value' => $values['address'], + 'return' => true, + ], + ]; + + $inputs[] = [ + 'label' => __('Agent name'), + 'id' => 'div-identifier', + 'arguments' => [ + 'name' => 'name', + 'type' => 'text', + 'value' => $values['name'], + 'return' => true, + ], + ]; + + return $this->printForm( + [ + 'form' => $form, + 'inputs' => $inputs, + ], + true + ); + } + + + /** + * Add agent to satellite conf. + * + * @return void + */ + public function addAgent() + { + global $config; + + $values['address'] = get_parameter('address'); + $values['name'] = get_parameter('name'); + + if ($this->parseSatelliteConf('save', $values) === false) { + $this->ajaxMsg('error', __('Error saving agent')); + } else { + $this->ajaxMsg('result', _('Host '.$values['addres'].' added.')); + } + + exit; + + } + + + /** + * Delete agent from satellite conf. + * + * @return void + */ + public function deleteAgent() + { + $values['address'] = get_parameter('address', ''); + $values['name'] = get_parameter('name', ''); + + if ($this->parseSatelliteConf('delete', $values) === false) { + $this->ajaxMsg('error', __('Error saving agent')); + } else { + $this->ajaxMsg('result', _('Host '.$values['addres'].' added.')); + } + + exit; + } + + + /** + * Parse satellite configuration . + * + * @param string $action Action to perform (save, delete). + * @param array $values. + * @return void + */ + private function parseSatelliteConf(string $action, array $values) + { + switch ($action) { + case 'save': + if (isset($values['address']) === true && empty($values['address']) === false) { + $string_hosts = 'add_host '.$values['address'].' '.$values['name']."\n"; + + // Add host to conf + array_push($this->satellite_config, $string_hosts); + + // Check config. + if (empty($this->satellite_config)) { + return false; + } + + $conf = implode('', $this->satellite_config); + } else { + return false; + } + break; + + case 'delete': + $conf = implode('', $this->satellite_config); + // Find agent to mark for deletion. + $pattern = io_safe_expreg($values['address'].' '.$values['name']); + $re = "/add_host ($pattern)/m"; + $subst = 'delete_host $1'; + $conf = preg_replace($re, $subst, $conf); + break; + + default: + $this->ajaxMsg('error', __('Error')); + exit; + } + + return $this->saveAgent($conf); + } + + + /** + * Saves agent to satellite cofiguration file. + * + * @param array $values + * @return void + */ + private function saveAgent(string $new_conf) + { + global $config; + + if (empty($new_conf)) { + return false; + } + + db_pandora_audit( + AUDIT_LOG_SYSTEM, + 'Update remote config for server '.$this->satellite_name + ); + + // Convert to config file encoding. + $encoding = config_satellite_get_encoding($new_conf); + if ($encoding !== false) { + $converted_server_config = mb_convert_encoding($new_conf, $encoding, 'UTF-8'); + if ($converted_server_config !== false) { + $new_conf = $converted_server_config; + } + } + + // Get filenames. + if ($this->satellite_server !== false) { + $files = config_satellite_get_satellite_config_filenames($this->satellite_name); + } else { + $files = []; + $files['conf'] = $config['remote_config'].'/conf/'.md5($this->satellite_name).'.srv.conf'; + $files['md5'] = $config['remote_config'].'/md5/'.md5($this->satellite_name).'.srv.md5'; + } + + // Save configuration + $result = file_put_contents($files['conf'], $new_conf); + + if ($result === false) { + return false; + } + + // Save configuration md5 + $result = file_put_contents($files['md5'], md5($new_conf)); + + } + + + /** + * 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(string $method) + { + return in_array($method, $this->AJAXMethods); + } + + + /** + * Minor function to dump json message as ajax response. + * + * @param string $type Type: result || error. + * @param string $msg Message. + * @param boolean $delete Deletion messages. + * + * @return void + */ + private function ajaxMsg($type, $msg, $delete=false) + { + $msg_err = 'Failed while saving: %s'; + $msg_ok = 'Successfully saved agent '; + + if ($delete) { + $msg_err = 'Failed while removing: %s'; + $msg_ok = 'Successfully deleted '; + } + + if ($type == 'error') { + echo json_encode( + [ + $type => ui_print_error_message( + __( + $msg_err, + $msg + ), + '', + true + ), + ] + ); + } else { + echo json_encode( + [ + $type => ui_print_success_message( + __( + $msg_ok, + $msg + ), + '', + true + ), + ] + ); + } + + exit; + } + + + /** + * Load Javascript code. + * + * @return string. + */ + public function loadJS() + { + // Nothing for this moment. + ob_start(); + + // Javascript content. + ?> + <script type="text/javascript"> + + /** + * Cleanup current dom entries. + */ + function cleanupDOM() { + $('#div-address').empty(); + $('#div-name').empty(); + } + + + /** + * Process ajax responses and shows a dialog with results. + */ + function showMsg(data) { + var title = "<?php echo __('Success'); ?>"; + var dt_satellite_agents = $("#satellite_agents").DataTable(); + + var text = ''; + var failed = 0; + try { + data = JSON.parse(data); + text = data['result']; + } catch (err) { + title = "<?php echo __('Failed'); ?>"; + text = err.message; + failed = 1; + } + if (!failed && data['error'] != undefined) { + title = "<?php echo __('Failed'); ?>"; + text = data['error']; + failed = 1; + } + if (data['report'] != undefined) { + data['report'].forEach(function (item){ + text += '<br>'+item; + }); + } + + $('#msg').empty(); + $('#msg').html(text); + $('#msg').dialog({ + width: 450, + position: { + my: 'center', + at: 'center', + of: window, + collision: 'fit' + }, + title: title, + buttons: [ + { + class: "ui-widget ui-state-default ui-corner-all ui-button-text-only sub ok submit-next", + text: 'OK', + click: function(e) { + if (!failed) { + $(".ui-dialog-content").dialog("close"); + $('.info').hide(); + cleanupDOM(); + dt_<?php echo $this->tableId; ?>.draw(false); + } else { + $(this).dialog('close'); + } + } + } + ] + }); + } + + /** + * Loads modal from AJAX to add a new agent. + */ + + function show_form(address) { + var btn_ok_text = '<?php echo __('OK'); ?>'; + var btn_cancel_text = '<?php echo __('Cancel'); ?>'; + var title = '<?php echo __('Add agent to satellite'); ?>'; + var method = 'addAgent'; + + + load_modal({ + target: $('#modal'), + form: 'modal_form', + url: '<?php echo ui_get_full_url('ajax.php', false, false, false); ?>', + ajax_callback: showMsg, + cleanup: cleanupDOM, + modal: { + title: title, + ok: btn_ok_text, + cancel: btn_cancel_text, + }, + extradata: [ + { + name: 'server_remote', + value: <?php echo $this->satellite_server; ?>, + } + ], + onshow: { + page: '<?php echo $this->ajaxController; ?>', + method: 'loadModal' + }, + onsubmit: { + page: '<?php echo $this->ajaxController; ?>', + method: method + } + }); + + } + + /** + * Delete selected agent + */ + function delete_agent(address, name) { + $('#aux').empty(); + $('#aux').text('<?php echo __('Are you sure?'); ?>'); + $('#aux').dialog({ + title: '<?php echo __('Delete'); ?> ' + address, + buttons: [ + { + class: 'ui-widget ui-state-default ui-corner-all ui-button-text-only sub upd submit-cancel', + text: '<?php echo __('Cancel'); ?>', + click: function(e) { + $(this).dialog('close'); + cleanupDOM(); + + } + }, + { + text: 'Delete', + class: 'ui-widget ui-state-default ui-corner-all ui-button-text-only sub ok submit-next', + click: function(e) { + $.ajax({ + method: 'post', + url: '<?php echo ui_get_full_url('ajax.php', false, false, false); ?>', + data: { + page: 'enterprise/godmode/servers/agents_satellite', + method: 'deleteAgent', + address: address, + name: name, + server_remote: <?php echo $this->satellite_server; ?>, + }, + datatype: "json", + success: function (data) { + showMsg(data); + }, + error: function(e) { + showMsg(e); + } + }); + } + } + ] + }); + } + + $(document).ready(function() { + + $("#submit-create").on('click', function(){ + show_form(); + }); + }); + + + </script> + <?php + // EOF Javascript content. + return ob_get_clean(); + } + + +} diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index 2ee996def6..aea7200686 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC220729'; +$build_version = 'PC220810'; $pandora_version = 'v7.0NG.763'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/include/functions.php b/pandora_console/include/functions.php index 3f84a31b13..ca958dd4a3 100644 --- a/pandora_console/include/functions.php +++ b/pandora_console/include/functions.php @@ -5996,6 +5996,26 @@ function send_test_email( } +/** + * Check ip is valid into network + * + * @param string $ip Ip XXX.XXX.XXX.XXX. + * @param string $cidr Network XXX.XXX.XXX.XXX/XX. + * + * @return boolean + */ +function cidr_match($ip, $cidr) +{ + list($subnet, $mask) = explode('/', $cidr); + + if ((ip2long($ip) & ~((1 << (32 - $mask)) - 1) ) == ip2long($subnet)) { + return true; + } + + return false; +} + + /** * Microtime float number. * @@ -6077,3 +6097,123 @@ if (function_exists('str_contains') === false) { } + + +/** + * Is reporting console node. + * + * @return boolean + */ +function is_reporting_console_node() +{ + global $config; + if (isset($config['reporting_console_enable']) === true + && (bool) $config['reporting_console_enable'] === true + && isset($config['reporting_console_node']) === true + && (bool) $config['reporting_console_node'] === true + ) { + return true; + } + + return false; +} + + +/** + * Acl reporting console node. + * + * @param string $path Path. + * + * @return boolean + */ +function acl_reporting_console_node($path, $tab='') +{ + global $config; + if (is_reporting_console_node() === false) { + return true; + } + + if (is_metaconsole() === true) { + if ($path === 'advanced/metasetup') { + switch ($tab) { + case 'update_manager_online': + case 'update_manager_offline': + case 'update_manager_history': + case 'update_manager_setup': + case 'file_manager': + return true; + + default: + return false; + } + } + + if ($path === 'advanced/users_setup') { + switch ($tab) { + case 'user_edit': + return true; + + default: + return false; + } + } + + if ($path === $config['homedir'].'/godmode/users/configure_user' + || $path === 'advanced/links' + || $path === $config['homedir'].'/enterprise/extensions/cron' + ) { + return true; + } + } else { + if ($path === 'godmode/servers/discovery') { + switch ($tab) { + case 'main': + case 'tasklist': + return true; + + default: + return false; + } + } + + if ($path === 'operation/users/user_edit' + || $path === 'operation/users/user_edit_notifications' + || $path === 'godmode/setup/file_manager' + || $path === 'godmode/update_manager/update_manager' + ) { + return true; + } + } + + return false; + +} + + +/** + * Necessary checks for the reporting console. + * + * @return string + */ +function notify_reporting_console_node() +{ + $return = ''; + + // Check php memory limit. + $PHPmemory_limit = config_return_in_bytes(ini_get('memory_limit')); + if ($PHPmemory_limit !== -1) { + $url = 'http://php.net/manual/en/ini.core.php#ini.memory-limit'; + if ($config['language'] == 'es') { + $url = 'http://php.net/manual/es/ini.core.php#ini.memory-limit'; + } + + $msg = __("Not recommended '%s' value in PHP configuration", $PHPmemory_limit); + $msg .= '<br>'.__('Recommended value is: -1'); + $msg .= '<br>'.__('Please, change it on your PHP configuration file (php.ini) or contact with administrator'); + $msg .= '<br><a href="'.$url.'" target="_blank">'.__('Documentation').'</a>'; + + $return = ui_print_error_message($msg, '', true); + } + + return $return; +} diff --git a/pandora_console/include/functions_config.php b/pandora_console/include/functions_config.php index eebc498131..23710c6622 100644 --- a/pandora_console/include/functions_config.php +++ b/pandora_console/include/functions_config.php @@ -358,6 +358,10 @@ function config_update_config() $error_update[] = __('Module Custom ID read only'); } + if (config_update_value('reporting_console_enable', get_parameter('reporting_console_enable'), true) === false) { + $error_update[] = __('Enable console report'); + } + if (config_update_value('unique_ip', get_parameter('unique_ip'), true) === false) { $error_update[] = __('Unique IP'); } @@ -2193,6 +2197,10 @@ function config_process_config() config_update_value('module_custom_id_ro', 0); } + if (!isset($config['reporting_console_enable'])) { + config_update_value('reporting_console_enable', 0); + } + if (!isset($config['elasticsearch_ip'])) { config_update_value('elasticsearch_ip', ''); } diff --git a/pandora_console/include/functions_cron.php b/pandora_console/include/functions_cron.php index a311b7ec4a..f7b1d25f13 100644 --- a/pandora_console/include/functions_cron.php +++ b/pandora_console/include/functions_cron.php @@ -422,11 +422,37 @@ function cron_list_table() array_keys(users_get_groups()) ); - $defined_tasks = db_get_all_rows_filter( - 'tuser_task_scheduled', - 'id_grupo IN ('.$user_groups.')' + $filter = ''; + if (is_reporting_console_node() === true) { + $write_perms = false; + $manage_perms = false; + $manage_pandora = false; + + $filter .= sprintf( + ' AND ( + tuser_task.function_name = "cron_task_generate_report" + OR tuser_task.function_name = "cron_task_generate_report_by_template" + OR tuser_task.function_name = "cron_task_save_report_to_disk" + )' + ); + } + + // Admin. + $sql = sprintf( + 'SELECT tuser_task_scheduled.* + FROM tuser_task_scheduled + INNER JOIN tuser_task + ON tuser_task_scheduled.id_user_task = tuser_task.id + WHERE + id_grupo IN (%s) + %s + ', + $user_groups, + $filter ); + $defined_tasks = db_get_all_rows_sql($sql); + if (!check_acl($config['id_user'], 0, 'PM')) { $read_tasks = []; foreach ($defined_tasks as $task) { @@ -466,7 +492,10 @@ function cron_list_table() $table->head[4] = __('Next execution'); $table->head[5] = __('Last run'); $table->head[6] = __('Group'); - $table->head[7] = __('Actions'); + if ($manage_perms || $manage_pandora) { + $table->head[7] = __('Actions'); + } + $table->align[7] = 'left'; foreach ($defined_tasks as $task) { @@ -521,7 +550,7 @@ function cron_list_table() break; case 'cron_task_generate_report': - if ((bool) $task['enabled'] === true && ($write_perms === true || $manage_pandora === true)) { + if ((bool) $task['enabled'] === true) { $data[0] = html_print_anchor( [ 'href' => sprintf( @@ -576,7 +605,7 @@ function cron_list_table() break; case 'cron_task_generate_report_by_template': - if ((bool) $task['enabled'] === true && ($write_perms === true || $manage_pandora === true)) { + if ((bool) $task['enabled'] === true) { $data[0] = html_print_anchor( [ 'href' => sprintf( @@ -928,25 +957,27 @@ function cron_list_table() } } - $data[7] .= html_print_anchor( - [ - 'href' => sprintf( - '%stoggle_console_task=%s&id_user_task=%s', - $url, - ((bool) $task['enabled'] === true) ? '0' : '1', - $task['id'] - ), - 'content' => html_print_image( - ((bool) $task['enabled'] === true) ? 'images/lightbulb.png' : 'images/lightbulb_off.png', - true, - [ - 'title' => ((bool) $task['enabled'] === true) ? __('Disable task') : __('Enable task'), - 'class' => 'invert_filter', - ] - ), - ], - true - ); + if ($manage_perms || $manage_pandora) { + $data[7] .= html_print_anchor( + [ + 'href' => sprintf( + '%stoggle_console_task=%s&id_user_task=%s', + $url, + ((bool) $task['enabled'] === true) ? '0' : '1', + $task['id'] + ), + 'content' => html_print_image( + ((bool) $task['enabled'] === true) ? 'images/lightbulb.png' : 'images/lightbulb_off.png', + true, + [ + 'title' => ((bool) $task['enabled'] === true) ? __('Disable task') : __('Enable task'), + 'class' => 'invert_filter', + ] + ), + ], + true + ); + } array_push($table->data, $data); } diff --git a/pandora_console/include/functions_events.php b/pandora_console/include/functions_events.php index b34a313737..b210187247 100644 --- a/pandora_console/include/functions_events.php +++ b/pandora_console/include/functions_events.php @@ -1091,18 +1091,36 @@ function events_get_all( // Custom data. if (empty($filter['custom_data']) === false) { - if ($filter['custom_data_filter_type'] === '1') { - $sql_filters[] = sprintf( - ' AND JSON_VALID(custom_data) = 1 - AND (JSON_EXTRACT(custom_data, "$.*") LIKE lower("%%%s%%") COLLATE utf8mb4_0900_ai_ci) ', - io_safe_output($filter['custom_data']) - ); + if (isset($config['dbconnection']->server_version) === true + && $config['dbconnection']->server_version > 80000 + ) { + if ($filter['custom_data_filter_type'] === '1') { + $sql_filters[] = sprintf( + ' AND JSON_VALID(custom_data) = 1 + AND (JSON_EXTRACT(custom_data, "$.*") LIKE lower("%%%s%%") COLLATE utf8mb4_0900_ai_ci) ', + io_safe_output($filter['custom_data']) + ); + } else { + $sql_filters[] = sprintf( + ' AND JSON_VALID(custom_data) = 1 + AND (JSON_SEARCH(JSON_KEYS(custom_data), "all", lower("%%%s%%") COLLATE utf8mb4_0900_ai_ci) IS NOT NULL) ', + io_safe_output($filter['custom_data']) + ); + } } else { - $sql_filters[] = sprintf( - ' AND JSON_VALID(custom_data) = 1 - AND (JSON_SEARCH(JSON_KEYS(custom_data), "all", lower("%%%s%%") COLLATE utf8mb4_0900_ai_ci) IS NOT NULL) ', - io_safe_output($filter['custom_data']) - ); + if ($filter['custom_data_filter_type'] === '1') { + $sql_filters[] = sprintf( + ' AND JSON_VALID(custom_data) = 1 AND JSON_EXTRACT(custom_data, "$.*") LIKE lower("%%%s%%") ', + $filter['custom_data'], + $filter['custom_data'] + ); + } else { + $sql_filters[] = sprintf( + ' AND JSON_VALID(custom_data) = 1 AND JSON_KEYS(custom_data) REGEXP "%s" ', + $filter['custom_data'], + $filter['custom_data'] + ); + } } } @@ -1383,7 +1401,7 @@ function events_get_all( case '1': // Group by events. - $group_by .= 'te.evento, te.id_agente, te.id_agentmodule, te.estado'; + $group_by .= 'te.evento, te.id_agente, te.id_agentmodule'; break; case '2': @@ -3737,7 +3755,7 @@ function events_get_response_target( // Parse the event custom data. if (empty($event['custom_data']) === false) { - $custom_data = json_decode(base64_decode($event['custom_data'])); + $custom_data = json_decode($event['custom_data']); foreach ($custom_data as $key => $value) { $target = str_replace('_customdata_'.$key.'_', $value, $target); } @@ -4279,7 +4297,7 @@ function events_page_custom_data($event) $table->head = []; $table->class = 'table_modal_alternate'; - $json_custom_data = base64_decode($event['custom_data']); + $json_custom_data = $event['custom_data']; $custom_data = json_decode($json_custom_data); if ($custom_data === null) { @@ -5290,7 +5308,7 @@ function events_get_field_value_by_event_id( // Parse the event custom data. if (!empty($event['custom_data'])) { - $custom_data = json_decode(base64_decode($event['custom_data'])); + $custom_data = json_decode($event['custom_data']); foreach ($custom_data as $key => $val) { $value = str_replace('_customdata_'.$key.'_', $val, $value); } diff --git a/pandora_console/include/lib/Dashboard/Widgets/BlockHistogram.php b/pandora_console/include/lib/Dashboard/Widgets/BlockHistogram.php index 58d28847ce..29a9f2060b 100644 --- a/pandora_console/include/lib/Dashboard/Widgets/BlockHistogram.php +++ b/pandora_console/include/lib/Dashboard/Widgets/BlockHistogram.php @@ -539,7 +539,7 @@ class BlockHistogram extends Widget 25, false, true, - true, + true ); break; diff --git a/pandora_console/include/styles/maintenance.css b/pandora_console/include/styles/maintenance.css index 821a30dced..a9b87c9d83 100644 --- a/pandora_console/include/styles/maintenance.css +++ b/pandora_console/include/styles/maintenance.css @@ -10,6 +10,14 @@ height: auto; } +.responsive-height { + height: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-content: center; +} + html { font-size: 18px; font-family: "lato-bolder", "Open Sans", sans-serif; @@ -58,3 +66,13 @@ a:hover { color: #333; text-decoration: none; } + +.container-list { + list-style: none; + width: 20%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: space-around; + margin: 0 auto; +} diff --git a/pandora_console/index.php b/pandora_console/index.php index 55e8b61d16..ad0e37c505 100755 --- a/pandora_console/index.php +++ b/pandora_console/index.php @@ -605,6 +605,13 @@ if (isset($config['id_user']) === false) { } } + if (is_reporting_console_node() === true) { + $_GET['sec'] = 'discovery'; + $_GET['sec2'] = 'godmode/servers/discovery'; + $_GET['wiz'] = 'tasklist'; + $home_page = ''; + } + db_logon($nick_in_db, $_SERVER['REMOTE_ADDR']); $_SESSION['id_usuario'] = $nick_in_db; $config['id_user'] = $nick_in_db; @@ -624,8 +631,6 @@ if (isset($config['id_user']) === false) { config_prepare_session(); } - - // ========================================================== // -------- SET THE CUSTOM CONFIGS OF USER ------------------ config_user_set_custom_config(); @@ -1042,6 +1047,13 @@ if ((bool) ($config['maintenance_mode'] ?? false) === true exit('</html>'); } +if (is_reporting_console_node() === true + && (bool) users_is_admin() === false +) { + include 'general/reporting_console_node.php'; + exit; +} + /* * ---------------------------------------------------------------------- * EXTENSIONS @@ -1199,6 +1211,10 @@ if ($config['pure'] == 0) { echo '<div id="main">'; } +if (is_reporting_console_node() === true) { + echo notify_reporting_console_node(); +} + // Page loader / selector. if ($searchPage) { include 'operation/search_results.php'; @@ -1224,6 +1240,17 @@ if ($searchPage) { $sec2 = ''; } + $tab = get_parameter('tab', ''); + if (empty($tab) === true) { + $tab = get_parameter('wiz', ''); + } + + $acl_reporting_console_node = acl_reporting_console_node($page, $tab); + if ($acl_reporting_console_node === false) { + include 'general/reporting_console_node.php'; + exit; + } + $page .= '.php'; // Enterprise ACL check. diff --git a/pandora_console/install.php b/pandora_console/install.php index 86d883c6ba..0b045af5f4 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@ <div style='height: 10px'> <?php $version = '7.0NG.763'; - $build = '220729'; + $build = '220810'; $banner = "v$version Build $build"; error_reporting(0); diff --git a/pandora_console/operation/menu.php b/pandora_console/operation/menu.php index 32cb360e11..1ffd564011 100644 --- a/pandora_console/operation/menu.php +++ b/pandora_console/operation/menu.php @@ -25,429 +25,430 @@ enterprise_include('operation/menu.php'); $menu_operation = []; $menu_operation['class'] = 'operation'; -// Agent read, Server read. -if (check_acl($config['id_user'], 0, 'AR')) { - // View agents - $menu_operation['estado']['text'] = __('Monitoring'); - $menu_operation['estado']['sec2'] = 'operation/agentes/tactical'; - $menu_operation['estado']['refr'] = 0; - $menu_operation['estado']['id'] = 'oper-agents'; +$access_console_node = !is_reporting_console_node(); +if ($access_console_node === true) { + // Agent read, Server read. + if (check_acl($config['id_user'], 0, 'AR')) { + // View agents. + $menu_operation['estado']['text'] = __('Monitoring'); + $menu_operation['estado']['sec2'] = 'operation/agentes/tactical'; + $menu_operation['estado']['refr'] = 0; + $menu_operation['estado']['id'] = 'oper-agents'; - $sub = []; - $sub['view']['text'] = __('Views'); - $sub['view']['id'] = 'Views'; - $sub['view']['type'] = 'direct'; - $sub['view']['subtype'] = 'nolink'; - $sub['view']['refr'] = 0; + $sub = []; + $sub['view']['text'] = __('Views'); + $sub['view']['id'] = 'Views'; + $sub['view']['type'] = 'direct'; + $sub['view']['subtype'] = 'nolink'; + $sub['view']['refr'] = 0; + $sub2 = []; + + $sub2['operation/agentes/tactical']['text'] = __('Tactical view'); + $sub2['operation/agentes/tactical']['refr'] = 0; + + $sub2['operation/agentes/group_view']['text'] = __('Group view'); + $sub2['operation/agentes/group_view']['refr'] = 0; + + $sub2['operation/tree']['text'] = __('Tree view'); + $sub2['operation/tree']['refr'] = 0; + + $sub2['operation/agentes/estado_agente']['text'] = __('Agent detail'); + $sub2['operation/agentes/estado_agente']['refr'] = 0; + $sub2['operation/agentes/estado_agente']['subsecs'] = ['operation/agentes/ver_agente']; + + $sub2['operation/agentes/status_monitor']['text'] = __('Monitor detail'); + $sub2['operation/agentes/status_monitor']['refr'] = 0; + + $sub2['operation/agentes/interface_view']['text'] = __('Interface view'); + $sub2['operation/agentes/interface_view']['refr'] = 0; + + enterprise_hook('tag_view_submenu'); + + $sub2['operation/agentes/alerts_status']['text'] = __('Alert detail'); + $sub2['operation/agentes/alerts_status']['refr'] = 0; + + $sub2['operation/heatmap']['text'] = __('Heatmap view'); + $sub2['operation/heatmap']['refr'] = 0; + + $sub['view']['sub2'] = $sub2; + + enterprise_hook('inventory_menu'); + + if ($config['activate_netflow']) { + $sub['network_traffic'] = [ + 'text' => __('Network'), + 'id' => 'Network', + 'type' => 'direct', + 'subtype' => 'nolink', + 'refr' => 0, + ]; + + // Initialize the submenu. + $netflow_sub = []; + + $netflow_sub = array_merge( + $netflow_sub, + [ + 'operation/netflow/netflow_explorer' => [ + 'text' => __('Netflow explorer'), + 'id' => 'Netflow explorer', + ], + 'operation/netflow/nf_live_view' => [ + 'text' => __('Netflow Live View'), + 'id' => 'Netflow Live View', + ], + ] + ); + + $netflow_sub = array_merge( + $netflow_sub, + [ + 'operation/network/network_usage_map' => [ + 'text' => __('Network usage map'), + 'id' => 'Network usage map', + ], + ] + ); + + $sub['network_traffic']['sub2'] = $netflow_sub; + } + + if ($config['log_collector'] == 1) { + enterprise_hook('log_collector_menu'); + } + + // End of view agents. + } + + // SNMP Console. $sub2 = []; + if (check_acl($config['id_user'], 0, 'AR') || check_acl($config['id_user'], 0, 'AW')) { + $sub2['operation/snmpconsole/snmp_view']['text'] = __('SNMP console'); + $sub2['operation/snmpconsole/snmp_browser']['text'] = __('SNMP browser'); + enterprise_hook('snmpconsole_submenu'); + } - $sub2['operation/agentes/tactical']['text'] = __('Tactical view'); - $sub2['operation/agentes/tactical']['refr'] = 0; + if (check_acl($config['id_user'], 0, 'PM')) { + $sub2['operation/snmpconsole/snmp_mib_uploader']['text'] = __('MIB uploader'); + } - $sub2['operation/agentes/group_view']['text'] = __('Group view'); - $sub2['operation/agentes/group_view']['refr'] = 0; + if (check_acl($config['id_user'], 0, 'LW') || check_acl($config['id_user'], 0, 'LM')) { + $sub2['godmode/snmpconsole/snmp_filters']['text'] = __('SNMP filters'); + $sub2['godmode/snmpconsole/snmp_trap_generator']['text'] = __('SNMP trap generator'); + } - $sub2['operation/tree']['text'] = __('Tree view'); - $sub2['operation/tree']['refr'] = 0; + if (empty($sub2) === false) { + $sub['snmpconsole']['sub2'] = $sub2; + $sub['snmpconsole']['text'] = __('SNMP'); + $sub['snmpconsole']['id'] = 'SNMP'; + $sub['snmpconsole']['refr'] = 0; + $sub['snmpconsole']['type'] = 'direct'; + $sub['snmpconsole']['subtype'] = 'nolink'; + } - $sub2['operation/agentes/estado_agente']['text'] = __('Agent detail'); - $sub2['operation/agentes/estado_agente']['refr'] = 0; - $sub2['operation/agentes/estado_agente']['subsecs'] = ['operation/agentes/ver_agente']; + enterprise_hook('cluster_menu'); + enterprise_hook('aws_menu'); + enterprise_hook('SAP_view'); - $sub2['operation/agentes/status_monitor']['text'] = __('Monitor detail'); - $sub2['operation/agentes/status_monitor']['refr'] = 0; + if (!empty($sub)) { + $menu_operation['estado']['text'] = __('Monitoring'); + $menu_operation['estado']['sec2'] = 'operation/agentes/tactical'; + $menu_operation['estado']['refr'] = 0; + $menu_operation['estado']['id'] = 'oper-agents'; + $menu_operation['estado']['sub'] = $sub; + } - $sub2['operation/agentes/interface_view']['text'] = __('Interface view'); - $sub2['operation/agentes/interface_view']['refr'] = 0; + // Start network view. + $sub = []; + if (check_acl($config['id_user'], 0, 'MR') || check_acl($config['id_user'], 0, 'MW') || check_acl($config['id_user'], 0, 'MM')) { + // Network enterprise. + $sub['operation/agentes/pandora_networkmap']['text'] = __('Network map'); + $sub['operation/agentes/pandora_networkmap']['id'] = 'Network map'; + $sub['operation/agentes/pandora_networkmap']['refr'] = 0; - enterprise_hook('tag_view_submenu'); + enterprise_hook('transmap_console'); + } - $sub2['operation/agentes/alerts_status']['text'] = __('Alert detail'); - $sub2['operation/agentes/alerts_status']['refr'] = 0; + enterprise_hook('services_menu'); - $sub2['operation/heatmap']['text'] = __('Heatmap view'); - $sub2['operation/heatmap']['refr'] = 0; - $sub['view']['sub2'] = $sub2; + if (check_acl($config['id_user'], 0, 'VR') || check_acl($config['id_user'], 0, 'VW') || check_acl($config['id_user'], 0, 'VM')) { + if (!isset($config['vc_favourite_view']) || $config['vc_favourite_view'] == 0) { + // Visual console. + $sub['godmode/reporting/map_builder']['text'] = __('Visual console'); + $sub['godmode/reporting/map_builder']['id'] = 'Visual console'; + } else { + // Visual console favorite. + $sub['godmode/reporting/visual_console_favorite']['text'] = __('Visual console'); + $sub['godmode/reporting/visual_console_favorite']['id'] = 'Visual console'; + } - enterprise_hook('inventory_menu'); + if ($config['vc_menu_items'] != 0) { + // Set godomode path. + if (!isset($config['vc_favourite_view']) || $config['vc_favourite_view'] == 0) { + $sub['godmode/reporting/map_builder']['subsecs'] = [ + 'godmode/reporting/map_builder', + 'godmode/reporting/visual_console_builder', + ]; + } else { + $sub['godmode/reporting/visual_console_favorite']['subsecs'] = [ + 'godmode/reporting/map_builder', + 'godmode/reporting/visual_console_builder', + ]; + } - if ($config['activate_netflow']) { - $sub['network_traffic'] = [ - 'text' => __('Network'), - 'id' => 'Network', - 'type' => 'direct', - 'subtype' => 'nolink', - 'refr' => 0, + // $layouts = db_get_all_rows_in_table ('tlayout', 'name'); + $own_info = get_user_info($config['id_user']); + $returnAllGroups = 0; + if ($own_info['is_admin']) { + $returnAllGroups = 1; + } + + $layouts = visual_map_get_user_layouts($config['id_user'], false, false, $returnAllGroups, true); + + $sub2 = []; + + if ($layouts === false) { + $layouts = []; + } else { + $id = (int) get_parameter('id', -1); + $break_max_console = false; + $max = $config['vc_menu_items']; + $i = 0; + foreach ($layouts as $layout) { + $i++; + if ($i > $max) { + $break_max_console = true; + break; + } + + $name = io_safe_output($layout['name']); + + $sub2['operation/visual_console/render_view&id='.$layout['id']]['text'] = ui_print_truncate_text($name, MENU_SIZE_TEXT, false, true, false); + $sub2['operation/visual_console/render_view&id='.$layout['id']]['id'] = mb_substr($name, 0, 19); + $sub2['operation/visual_console/render_view&id='.$layout['id']]['title'] = $name; + if (!empty($config['vc_refr'])) { + $sub2['operation/visual_console/render_view&id='.$layout['id']]['refr'] = $config['vc_refr']; + } else if (((int) get_parameter('refr', 0)) > 0) { + $sub2['operation/visual_console/render_view&id='.$layout['id']]['refr'] = (int) get_parameter('refr', 0); + } else { + $sub2['operation/visual_console/render_view&id='.$layout['id']]['refr'] = 0; + } + } + + if ($break_max_console) { + $sub2['godmode/reporting/visual_console_favorite']['text'] = __('Show more').' >'; + $sub2['godmode/reporting/visual_console_favorite']['id'] = 'visual_favourite_console'; + $sub2['godmode/reporting/visual_console_favorite']['title'] = __('Show more'); + $sub2['godmode/reporting/visual_console_favorite']['refr'] = 0; + } + + if (!empty($sub2)) { + if (!isset($config['vc_favourite_view']) || $config['vc_favourite_view'] == 0) { + $sub['godmode/reporting/map_builder']['sub2'] = $sub2; + } else { + $sub['godmode/reporting/visual_console_favorite']['sub2'] = $sub2; + } + } + } + } + } + + if (check_acl($config['id_user'], 0, 'MR') || check_acl($config['id_user'], 0, 'MW') || check_acl($config['id_user'], 0, 'MM')) { + // INI GIS Maps. + if ($config['activate_gis']) { + $sub['gismaps']['text'] = __('GIS Maps'); + $sub['gismaps']['id'] = 'GIS Maps'; + $sub['gismaps']['type'] = 'direct'; + $sub['gismaps']['subtype'] = 'nolink'; + $sub2 = []; + $sub2['operation/gis_maps/gis_map']['text'] = __('List of Gis maps'); + $sub2['operation/gis_maps/gis_map']['id'] = 'List of Gis maps'; + $gisMaps = db_get_all_rows_in_table('tgis_map', 'map_name'); + if ($gisMaps === false) { + $gisMaps = []; + } + + $id = (int) get_parameter('id', -1); + + $own_info = get_user_info($config['id_user']); + if ($own_info['is_admin'] || check_acl($config['id_user'], 0, 'PM')) { + $own_groups = array_keys(users_get_groups($config['id_user'], 'MR')); + } else { + $own_groups = array_keys(users_get_groups($config['id_user'], 'MR', false)); + } + + foreach ($gisMaps as $gisMap) { + $is_in_group = in_array($gisMap['group_id'], $own_groups); + if (!$is_in_group) { + continue; + } + + $sub2['operation/gis_maps/render_view&map_id='.$gisMap['id_tgis_map']]['text'] = ui_print_truncate_text(io_safe_output($gisMap['map_name']), MENU_SIZE_TEXT, false, true, false); + $sub2['operation/gis_maps/render_view&map_id='.$gisMap['id_tgis_map']]['id'] = mb_substr(io_safe_output($gisMap['map_name']), 0, 15); + $sub2['operation/gis_maps/render_view&map_id='.$gisMap['id_tgis_map']]['title'] = io_safe_output($gisMap['map_name']); + $sub2['operation/gis_maps/render_view&map_id='.$gisMap['id_tgis_map']]['refr'] = 0; + } + + $sub['gismaps']['sub2'] = $sub2; + } + + // END GIS Maps. + } + + if (!empty($sub)) { + $menu_operation['network']['text'] = __('Topology maps'); + $menu_operation['network']['sec2'] = 'operation/agentes/networkmap_list'; + $menu_operation['network']['refr'] = 0; + $menu_operation['network']['id'] = 'oper-networkconsole'; + $menu_operation['network']['sub'] = $sub; + } + + // End networkview. + // Reports read. + if (check_acl($config['id_user'], 0, 'RR') || check_acl($config['id_user'], 0, 'RW') || check_acl($config['id_user'], 0, 'RM')) { + // Reporting. + $menu_operation['reporting']['text'] = __('Reporting'); + $menu_operation['reporting']['sec2'] = 'godmode/reporting/reporting_builder'; + $menu_operation['reporting']['id'] = 'oper-reporting'; + $menu_operation['reporting']['refr'] = 300; + + $sub = []; + + $sub['godmode/reporting/reporting_builder']['text'] = __('Custom reporting'); + $sub['godmode/reporting/reporting_builder']['id'] = 'Custom reporting'; + // Set godomode path. + $sub['godmode/reporting/reporting_builder']['subsecs'] = [ + 'godmode/reporting/reporting_builder', + 'operation/reporting/reporting_viewer', ]; - // Initialize the submenu. - $netflow_sub = []; - $netflow_sub = array_merge( - $netflow_sub, - [ - 'operation/netflow/netflow_explorer' => [ - 'text' => __('Netflow explorer'), - 'id' => 'Netflow explorer', - ], - 'operation/netflow/nf_live_view' => [ - 'text' => __('Netflow Live View'), - 'id' => 'Netflow Live View', - ], - ] - ); - - $netflow_sub = array_merge( - $netflow_sub, - [ - 'operation/network/network_usage_map' => [ - 'text' => __('Network usage map'), - 'id' => 'Network usage map', - ], - ] - ); - - $sub['network_traffic']['sub2'] = $netflow_sub; - } - - if ($config['log_collector'] == 1) { - enterprise_hook('log_collector_menu'); - } - - // End of view agents. -} - -// SNMP Console. -$sub2 = []; -if (check_acl($config['id_user'], 0, 'AR') || check_acl($config['id_user'], 0, 'AW')) { - $sub2['operation/snmpconsole/snmp_view']['text'] = __('SNMP console'); - $sub2['operation/snmpconsole/snmp_browser']['text'] = __('SNMP browser'); - enterprise_hook('snmpconsole_submenu'); -} - -if (check_acl($config['id_user'], 0, 'PM')) { - $sub2['operation/snmpconsole/snmp_mib_uploader']['text'] = __('MIB uploader'); -} - -if (check_acl($config['id_user'], 0, 'LW') || check_acl($config['id_user'], 0, 'LM')) { - $sub2['godmode/snmpconsole/snmp_filters']['text'] = __('SNMP filters'); - $sub2['godmode/snmpconsole/snmp_trap_generator']['text'] = __('SNMP trap generator'); -} - -if (!empty($sub2)) { - $sub['snmpconsole']['sub2'] = $sub2; - $sub['snmpconsole']['text'] = __('SNMP'); - $sub['snmpconsole']['id'] = 'SNMP'; - $sub['snmpconsole']['refr'] = 0; - $sub['snmpconsole']['type'] = 'direct'; - $sub['snmpconsole']['subtype'] = 'nolink'; -} - -enterprise_hook('cluster_menu'); -enterprise_hook('aws_menu'); -enterprise_hook('SAP_view'); - - -if (!empty($sub)) { - $menu_operation['estado']['text'] = __('Monitoring'); - $menu_operation['estado']['sec2'] = 'operation/agentes/tactical'; - $menu_operation['estado']['refr'] = 0; - $menu_operation['estado']['id'] = 'oper-agents'; - $menu_operation['estado']['sub'] = $sub; -} - -// Start network view. -$sub = []; -if (check_acl($config['id_user'], 0, 'MR') || check_acl($config['id_user'], 0, 'MW') || check_acl($config['id_user'], 0, 'MM')) { - // Network enterprise. - $sub['operation/agentes/pandora_networkmap']['text'] = __('Network map'); - $sub['operation/agentes/pandora_networkmap']['id'] = 'Network map'; - $sub['operation/agentes/pandora_networkmap']['refr'] = 0; - - enterprise_hook('transmap_console'); -} - -enterprise_hook('services_menu'); - -if (check_acl($config['id_user'], 0, 'VR') || check_acl($config['id_user'], 0, 'VW') || check_acl($config['id_user'], 0, 'VM')) { - if (!isset($config['vc_favourite_view']) || $config['vc_favourite_view'] == 0) { - // Visual console. - $sub['godmode/reporting/map_builder']['text'] = __('Visual console'); - $sub['godmode/reporting/map_builder']['id'] = 'Visual console'; - } else { - // Visual console favorite. - $sub['godmode/reporting/visual_console_favorite']['text'] = __('Visual console'); - $sub['godmode/reporting/visual_console_favorite']['id'] = 'Visual console'; - } - - if ($config['vc_menu_items'] != 0) { + $sub['godmode/reporting/graphs']['text'] = __('Custom graphs'); + $sub['godmode/reporting/graphs']['id'] = 'Custom graphs'; // Set godomode path. - if (!isset($config['vc_favourite_view']) || $config['vc_favourite_view'] == 0) { - $sub['godmode/reporting/map_builder']['subsecs'] = [ - 'godmode/reporting/map_builder', - 'godmode/reporting/visual_console_builder', - ]; - } else { - $sub['godmode/reporting/visual_console_favorite']['subsecs'] = [ - 'godmode/reporting/map_builder', - 'godmode/reporting/visual_console_builder', - ]; - } + $sub['godmode/reporting/graphs']['subsecs'] = [ + 'operation/reporting/graph_viewer', + 'godmode/reporting/graph_builder', + ]; - // $layouts = db_get_all_rows_in_table ('tlayout', 'name'); - $own_info = get_user_info($config['id_user']); - $returnAllGroups = 0; - if ($own_info['is_admin']) { - $returnAllGroups = 1; - } + if (check_acl($config['id_user'], 0, 'RR') + || check_acl($config['id_user'], 0, 'RW') + || check_acl($config['id_user'], 0, 'RM') + ) { + $sub['operation/dashboard/dashboard']['text'] = __('Dashboard'); + $sub['operation/dashboard/dashboard']['id'] = 'Dashboard'; + $sub['operation/dashboard/dashboard']['refr'] = 0; + $sub['operation/dashboard/dashboard']['subsecs'] = ['operation/dashboard/dashboard']; - $layouts = visual_map_get_user_layouts($config['id_user'], false, false, $returnAllGroups, true); + $dashboards = Manager::getDashboards(-1, -1, true); - $sub2 = []; + $sub2 = []; + foreach ($dashboards as $dashboard) { + $name = io_safe_output($dashboard['name']); - if ($layouts === false) { - $layouts = []; - } else { - $id = (int) get_parameter('id', -1); - $break_max_console = false; - $max = $config['vc_menu_items']; - $i = 0; - foreach ($layouts as $layout) { - $i++; - if ($i > $max) { - $break_max_console = true; - break; - } - - $name = io_safe_output($layout['name']); - - $sub2['operation/visual_console/render_view&id='.$layout['id']]['text'] = ui_print_truncate_text($name, MENU_SIZE_TEXT, false, true, false); - $sub2['operation/visual_console/render_view&id='.$layout['id']]['id'] = mb_substr($name, 0, 19); - $sub2['operation/visual_console/render_view&id='.$layout['id']]['title'] = $name; - if (!empty($config['vc_refr'])) { - $sub2['operation/visual_console/render_view&id='.$layout['id']]['refr'] = $config['vc_refr']; - } else if (((int) get_parameter('refr', 0)) > 0) { - $sub2['operation/visual_console/render_view&id='.$layout['id']]['refr'] = (int) get_parameter('refr', 0); - } else { - $sub2['operation/visual_console/render_view&id='.$layout['id']]['refr'] = 0; - } + $sub2['operation/dashboard/dashboard&dashboardId='.$dashboard['id']] = [ + 'text' => ui_print_truncate_text($name, MENU_SIZE_TEXT, false, true, false), + 'title' => $name, + ]; } - if ($break_max_console) { - $sub2['godmode/reporting/visual_console_favorite']['text'] = __('Show more').' >'; - $sub2['godmode/reporting/visual_console_favorite']['id'] = 'visual_favourite_console'; - $sub2['godmode/reporting/visual_console_favorite']['title'] = __('Show more'); - $sub2['godmode/reporting/visual_console_favorite']['refr'] = 0; - } - - if (!empty($sub2)) { - if (!isset($config['vc_favourite_view']) || $config['vc_favourite_view'] == 0) { - $sub['godmode/reporting/map_builder']['sub2'] = $sub2; - } else { - $sub['godmode/reporting/visual_console_favorite']['sub2'] = $sub2; - } + if (empty($sub2) === false) { + $sub['operation/dashboard/dashboard']['sub2'] = $sub2; } } - } -} + enterprise_hook('reporting_godmenu'); -if (check_acl($config['id_user'], 0, 'MR') || check_acl($config['id_user'], 0, 'MW') || check_acl($config['id_user'], 0, 'MM')) { - // INI GIS Maps. - if ($config['activate_gis']) { - $sub['gismaps']['text'] = __('GIS Maps'); - $sub['gismaps']['id'] = 'GIS Maps'; - $sub['gismaps']['type'] = 'direct'; - $sub['gismaps']['subtype'] = 'nolink'; - $sub2 = []; - $sub2['operation/gis_maps/gis_map']['text'] = __('List of Gis maps'); - $sub2['operation/gis_maps/gis_map']['id'] = 'List of Gis maps'; - $gisMaps = db_get_all_rows_in_table('tgis_map', 'map_name'); - if ($gisMaps === false) { - $gisMaps = []; - } - - $id = (int) get_parameter('id', -1); - - $own_info = get_user_info($config['id_user']); - if ($own_info['is_admin'] || check_acl($config['id_user'], 0, 'PM')) { - $own_groups = array_keys(users_get_groups($config['id_user'], 'MR')); - } else { - $own_groups = array_keys(users_get_groups($config['id_user'], 'MR', false)); - } - - foreach ($gisMaps as $gisMap) { - $is_in_group = in_array($gisMap['group_id'], $own_groups); - if (!$is_in_group) { - continue; - } - - $sub2['operation/gis_maps/render_view&map_id='.$gisMap['id_tgis_map']]['text'] = ui_print_truncate_text(io_safe_output($gisMap['map_name']), MENU_SIZE_TEXT, false, true, false); - $sub2['operation/gis_maps/render_view&map_id='.$gisMap['id_tgis_map']]['id'] = mb_substr(io_safe_output($gisMap['map_name']), 0, 15); - $sub2['operation/gis_maps/render_view&map_id='.$gisMap['id_tgis_map']]['title'] = io_safe_output($gisMap['map_name']); - $sub2['operation/gis_maps/render_view&map_id='.$gisMap['id_tgis_map']]['refr'] = 0; - } - - $sub['gismaps']['sub2'] = $sub2; + $menu_operation['reporting']['sub'] = $sub; + // End reporting. } - // END GIS Maps. -} - -if (!empty($sub)) { - $menu_operation['network']['text'] = __('Topology maps'); - $menu_operation['network']['sec2'] = 'operation/agentes/networkmap_list'; - $menu_operation['network']['refr'] = 0; - $menu_operation['network']['id'] = 'oper-networkconsole'; - $menu_operation['network']['sub'] = $sub; -} - -// End networkview. -// Reports read. -if (check_acl($config['id_user'], 0, 'RR') || check_acl($config['id_user'], 0, 'RW') || check_acl($config['id_user'], 0, 'RM')) { - // Reporting. - $menu_operation['reporting']['text'] = __('Reporting'); - $menu_operation['reporting']['sec2'] = 'godmode/reporting/reporting_builder'; - $menu_operation['reporting']['id'] = 'oper-reporting'; - $menu_operation['reporting']['refr'] = 300; - - $sub = []; - - $sub['godmode/reporting/reporting_builder']['text'] = __('Custom reporting'); - $sub['godmode/reporting/reporting_builder']['id'] = 'Custom reporting'; - // Set godomode path. - $sub['godmode/reporting/reporting_builder']['subsecs'] = [ - 'godmode/reporting/reporting_builder', - 'operation/reporting/reporting_viewer', - ]; - - - $sub['godmode/reporting/graphs']['text'] = __('Custom graphs'); - $sub['godmode/reporting/graphs']['id'] = 'Custom graphs'; - // Set godomode path. - $sub['godmode/reporting/graphs']['subsecs'] = [ - 'operation/reporting/graph_viewer', - 'godmode/reporting/graph_builder', - ]; - - if (check_acl($config['id_user'], 0, 'RR') - || check_acl($config['id_user'], 0, 'RW') - || check_acl($config['id_user'], 0, 'RM') + // Events reading. + if (check_acl($config['id_user'], 0, 'ER') + || check_acl($config['id_user'], 0, 'EW') + || check_acl($config['id_user'], 0, 'EM') ) { - $sub['operation/dashboard/dashboard']['text'] = __('Dashboard'); - $sub['operation/dashboard/dashboard']['id'] = 'Dashboard'; - $sub['operation/dashboard/dashboard']['refr'] = 0; - $sub['operation/dashboard/dashboard']['subsecs'] = ['operation/dashboard/dashboard']; + // Events. + $menu_operation['eventos']['text'] = __('Events'); + $menu_operation['eventos']['refr'] = 0; + $menu_operation['eventos']['sec2'] = 'operation/events/events'; + $menu_operation['eventos']['id'] = 'oper-events'; - $dashboards = Manager::getDashboards(-1, -1, true); + $sub = []; + $sub['operation/events/events']['text'] = __('View events'); + $sub['operation/events/events']['id'] = 'View events'; + $sub['operation/events/events']['pages'] = ['godmode/events/events']; - $sub2 = []; - foreach ($dashboards as $dashboard) { - $name = io_safe_output($dashboard['name']); + // If ip doesn't is in list of allowed IP, isn't show this options. + include_once 'include/functions_api.php'; + if (isInACL($_SERVER['REMOTE_ADDR'])) { + $pss = get_user_info($config['id_user']); + $hashup = md5($config['id_user'].$pss['password']); - $sub2['operation/dashboard/dashboard&dashboardId='.$dashboard['id']] = [ - 'text' => ui_print_truncate_text($name, MENU_SIZE_TEXT, false, true, false), - 'title' => $name, - ]; - } - - if (empty($sub2) === false) { - $sub['operation/dashboard/dashboard']['sub2'] = $sub2; - } - } - - enterprise_hook('reporting_godmenu'); - - $menu_operation['reporting']['sub'] = $sub; - // End reporting. -} - -// Events reading. -if (check_acl($config['id_user'], 0, 'ER') - || check_acl($config['id_user'], 0, 'EW') - || check_acl($config['id_user'], 0, 'EM') -) { - // Events. - $menu_operation['eventos']['text'] = __('Events'); - $menu_operation['eventos']['refr'] = 0; - $menu_operation['eventos']['sec2'] = 'operation/events/events'; - $menu_operation['eventos']['id'] = 'oper-events'; - - $sub = []; - $sub['operation/events/events']['text'] = __('View events'); - $sub['operation/events/events']['id'] = 'View events'; - $sub['operation/events/events']['pages'] = ['godmode/events/events']; - - // If ip doesn't is in list of allowed IP, isn't show this options. - include_once 'include/functions_api.php'; - if (isInACL($_SERVER['REMOTE_ADDR'])) { - $pss = get_user_info($config['id_user']); - $hashup = md5($config['id_user'].$pss['password']); - - $user_filter = db_get_row_sql( - sprintf( - 'SELECT f.id_filter, f.id_name + $user_filter = db_get_row_sql( + sprintf( + 'SELECT f.id_filter, f.id_name FROM tevent_filter f INNER JOIN tusuario u ON u.default_event_filter=f.id_filter WHERE u.id_user = "%s" ', - $config['id_user'] - ) - ); - if ($user_filter !== false) { - $user_event_filter = events_get_event_filter($user_filter['id_filter']); - } else { - // Default. - $user_event_filter = [ - 'status' => EVENT_NO_VALIDATED, - 'event_view_hr' => $config['event_view_hr'], - 'group_rep' => 1, - 'tag_with' => [], - 'tag_without' => [], - 'history' => false, - ]; + $config['id_user'] + ) + ); + if ($user_filter !== false) { + $user_event_filter = events_get_event_filter($user_filter['id_filter']); + } else { + // Default. + $user_event_filter = [ + 'status' => EVENT_NO_VALIDATED, + 'event_view_hr' => $config['event_view_hr'], + 'group_rep' => 1, + 'tag_with' => [], + 'tag_without' => [], + 'history' => false, + ]; + } + + $fb64 = base64_encode(json_encode($user_event_filter)); + + // RSS. + $sub['operation/events/events_rss.php?user='.$config['id_user'].'&hashup='.$hashup.'&fb64='.$fb64]['text'] = __('RSS'); + $sub['operation/events/events_rss.php?user='.$config['id_user'].'&hashup='.$hashup.'&fb64='.$fb64]['id'] = 'RSS'; + $sub['operation/events/events_rss.php?user='.$config['id_user'].'&hashup='.$hashup.'&fb64='.$fb64]['type'] = 'direct'; } - $fb64 = base64_encode(json_encode($user_event_filter)); - - // RSS. - $sub['operation/events/events_rss.php?user='.$config['id_user'].'&hashup='.$hashup.'&fb64='.$fb64]['text'] = __('RSS'); - $sub['operation/events/events_rss.php?user='.$config['id_user'].'&hashup='.$hashup.'&fb64='.$fb64]['id'] = 'RSS'; - $sub['operation/events/events_rss.php?user='.$config['id_user'].'&hashup='.$hashup.'&fb64='.$fb64]['type'] = 'direct'; - } - - // Sound Events. - // $javascript = 'javascript: openSoundEventWindow();'; - // $sub[$javascript]['text'] = __('Sound Events'); - // $sub[$javascript]['id'] = 'Sound Events'; - // $sub[$javascript]['type'] = 'direct'; - $data_sound = base64_encode( - json_encode( - [ - 'title' => __('Sound Console'), - 'start' => __('Start'), - 'stop' => __('Stop'), - 'noAlert' => __('No alert'), - 'silenceAlarm' => __('Silence alarm'), - 'url' => ui_get_full_url('ajax.php'), - 'page' => 'include/ajax/events', - ] - ) - ); + // Sound Events. + // $javascript = 'javascript: openSoundEventWindow();'; + // $sub[$javascript]['text'] = __('Sound Events'); + // $sub[$javascript]['id'] = 'Sound Events'; + // $sub[$javascript]['type'] = 'direct'; + $data_sound = base64_encode( + json_encode( + [ + 'title' => __('Sound Console'), + 'start' => __('Start'), + 'stop' => __('Stop'), + 'noAlert' => __('No alert'), + 'silenceAlarm' => __('Silence alarm'), + 'url' => ui_get_full_url('ajax.php'), + 'page' => 'include/ajax/events', + ] + ) + ); - $javascript = 'javascript: openSoundEventModal(\''.$data_sound.'\');'; - $sub[$javascript]['text'] = __('Sound Events'); - $sub[$javascript]['id'] = 'Sound Events Modal'; - $sub[$javascript]['type'] = 'direct'; + $javascript = 'javascript: openSoundEventModal(\''.$data_sound.'\');'; + $sub[$javascript]['text'] = __('Sound Events'); + $sub[$javascript]['id'] = 'Sound Events Modal'; + $sub[$javascript]['type'] = 'direct'; - echo '<div id="modal-sound" style="display:none;"></div>'; + echo '<div id="modal-sound" style="display:none;"></div>'; - ui_require_javascript_file('pandora_events'); + ui_require_javascript_file('pandora_events'); - ?> + ?> <script type="text/javascript"> function openSoundEventWindow() { url = '<?php echo ui_get_full_url('operation/events/sound_events.php'); ?>'; @@ -466,8 +467,9 @@ if (check_acl($config['id_user'], 0, 'ER') ); } </script> - <?php - $menu_operation['eventos']['sub'] = $sub; + <?php + $menu_operation['eventos']['sub'] = $sub; + } } // Workspace. @@ -487,105 +489,116 @@ $sub['operation/users/user_edit_notifications']['text'] = __('Configure user not $sub['operation/users/user_edit_notifications']['id'] = 'Configure user notifications'; $sub['operation/users/user_edit_notifications']['refr'] = 0; +if ($access_console_node === true) { + // Incidents. + $temp_sec2 = $sec2; + $sec2 = 'incident'; + $sec2sub = 'operation/incidents/incident_statistics'; + $sub[$sec2]['text'] = __('Incidents'); + $sub[$sec2]['id'] = 'Incidents'; + $sub[$sec2]['type'] = 'direct'; + $sub[$sec2]['subtype'] = 'nolink'; + $sub[$sec2]['refr'] = 0; + $sub[$sec2]['subsecs'] = [ + 'operation/incidents/incident_detail', + 'operation/integria_incidents', + ]; -// Incidents. -$temp_sec2 = $sec2; -$sec2 = 'incident'; -$sec2sub = 'operation/incidents/incident_statistics'; -$sub[$sec2]['text'] = __('Incidents'); -$sub[$sec2]['id'] = 'Incidents'; -$sub[$sec2]['type'] = 'direct'; -$sub[$sec2]['subtype'] = 'nolink'; -$sub[$sec2]['refr'] = 0; -$sub[$sec2]['subsecs'] = [ - 'operation/incidents/incident_detail', - 'operation/integria_incidents', -]; + $sub2 = []; + $sub2[$sec2sub]['text'] = __('Integria IMS statistics'); + $sub2['operation/incidents/list_integriaims_incidents']['text'] = __('Integria IMS ticket list'); -$sub2 = []; -$sub2[$sec2sub]['text'] = __('Integria IMS statistics'); -$sub2['operation/incidents/list_integriaims_incidents']['text'] = __('Integria IMS ticket list'); - -$sub[$sec2]['sub2'] = $sub2; -$sec2 = $temp_sec2; + $sub[$sec2]['sub2'] = $sub2; + $sec2 = $temp_sec2; -// Messages. -$sub['message_list']['text'] = __('Messages'); -$sub['message_list']['id'] = 'Messages'; -$sub['message_list']['refr'] = 0; -$sub['message_list']['type'] = 'direct'; -$sub['message_list']['subtype'] = 'nolink'; -$sub2 = []; -$sub2['operation/messages/message_list']['text'] = __('Messages List'); -$sub2['operation/messages/message_edit&new_msg=1']['text'] = __('New message'); + // Messages. + $sub['message_list']['text'] = __('Messages'); + $sub['message_list']['id'] = 'Messages'; + $sub['message_list']['refr'] = 0; + $sub['message_list']['type'] = 'direct'; + $sub['message_list']['subtype'] = 'nolink'; + $sub2 = []; + $sub2['operation/messages/message_list']['text'] = __('Messages List'); + $sub2['operation/messages/message_edit&new_msg=1']['text'] = __('New message'); -$sub['message_list']['sub2'] = $sub2; + $sub['message_list']['sub2'] = $sub2; +} $menu_operation['workspace']['sub'] = $sub; -// End Workspace -// Rest of options, all with AR privilege (or should events be with incidents?) -// ~ if (check_acl ($config['id_user'], 0, "AR")) { -// Extensions menu additions. -if (is_array($config['extensions'])) { - $sub = []; - $sub2 = []; +if ($access_console_node === true) { + // Rest of options, all with AR privilege (or should events be with incidents?) + // ~ if (check_acl ($config['id_user'], 0, "AR")) { + // Extensions menu additions. + if (is_array($config['extensions'])) { + $sub = []; + $sub2 = []; - if (check_acl($config['id_user'], 0, 'RR') || check_acl($config['id_user'], 0, 'RW') || check_acl($config['id_user'], 0, 'RM')) { - $sub['operation/agentes/exportdata']['text'] = __('Export data'); - $sub['operation/agentes/exportdata']['id'] = 'Export data'; - $sub['operation/agentes/exportdata']['subsecs'] = ['operation/agentes/exportdata']; - } - - if (check_acl($config['id_user'], 0, 'AR') || check_acl($config['id_user'], 0, 'AD') || check_acl($config['id_user'], 0, 'AW')) { - $sub['godmode/agentes/planned_downtime.list']['text'] = __('Scheduled downtime'); - $sub['godmode/agentes/planned_downtime.list']['id'] = 'Scheduled downtime'; - } - - foreach ($config['extensions'] as $extension) { - // If no operation_menu is a godmode extension. - if ($extension['operation_menu'] == '') { - continue; + if (check_acl($config['id_user'], 0, 'RR') || check_acl($config['id_user'], 0, 'RW') || check_acl($config['id_user'], 0, 'RM')) { + $sub['operation/agentes/exportdata']['text'] = __('Export data'); + $sub['operation/agentes/exportdata']['id'] = 'Export data'; + $sub['operation/agentes/exportdata']['subsecs'] = ['operation/agentes/exportdata']; } - // Check the ACL for this user. - if (! check_acl($config['id_user'], 0, $extension['operation_menu']['acl'])) { - continue; + if (check_acl($config['id_user'], 0, 'AR') || check_acl($config['id_user'], 0, 'AD') || check_acl($config['id_user'], 0, 'AW')) { + $sub['godmode/agentes/planned_downtime.list']['text'] = __('Scheduled downtime'); + $sub['godmode/agentes/planned_downtime.list']['id'] = 'Scheduled downtime'; } - $extension_menu = $extension['operation_menu']; - if ($extension['operation_menu']['name'] == 'Matrix' - && ( !check_acl($config['id_user'], 0, 'ER') - || !check_acl($config['id_user'], 0, 'EW') - || !check_acl($config['id_user'], 0, 'EM') ) - ) { - continue; - } - - // Check if was displayed inside other menu. - if ($extension['operation_menu']['fatherId'] == '') { - if ($extension_menu['name'] == 'Update manager') { + foreach ($config['extensions'] as $extension) { + // If no operation_menu is a godmode extension. + if ($extension['operation_menu'] == '') { continue; } - $sub[$extension_menu['sec2']]['text'] = $extension_menu['name']; - $sub[$extension_menu['sec2']]['id'] = $extension_menu['name']; - $sub[$extension_menu['sec2']]['refr'] = 0; - } else { - if (array_key_exists('fatherId', $extension_menu)) { - // Check that extension father ID exists previously on the menu. - if ((strlen($extension_menu['fatherId']) > 0)) { - if (array_key_exists('subfatherId', $extension_menu) && empty($extension_menu['subfatherId']) === false) { - if ((strlen($extension_menu['subfatherId']) > 0)) { - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['text'] = __($extension_menu['name']); - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['id'] = $extension_menu['name']; - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['refr'] = 0; - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['icon'] = $extension_menu['icon']; - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['sec'] = 'extensions'; - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['extension'] = true; - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['enterprise'] = $extension['enterprise']; - $menu_operation[$extension_menu['fatherId']]['hasExtensions'] = true; + // Check the ACL for this user. + if (! check_acl($config['id_user'], 0, $extension['operation_menu']['acl'])) { + continue; + } + + $extension_menu = $extension['operation_menu']; + if ($extension['operation_menu']['name'] == 'Matrix' + && ( !check_acl($config['id_user'], 0, 'ER') + || !check_acl($config['id_user'], 0, 'EW') + || !check_acl($config['id_user'], 0, 'EM') ) + ) { + continue; + } + + // Check if was displayed inside other menu. + if ($extension['operation_menu']['fatherId'] == '') { + if ($extension_menu['name'] == 'Update manager') { + continue; + } + + $sub[$extension_menu['sec2']]['text'] = $extension_menu['name']; + $sub[$extension_menu['sec2']]['id'] = $extension_menu['name']; + $sub[$extension_menu['sec2']]['refr'] = 0; + } else { + if (array_key_exists('fatherId', $extension_menu)) { + // Check that extension father ID exists previously on the menu. + if ((strlen($extension_menu['fatherId']) > 0)) { + if (array_key_exists('subfatherId', $extension_menu) && empty($extension_menu['subfatherId']) === false) { + if ((strlen($extension_menu['subfatherId']) > 0)) { + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['text'] = __($extension_menu['name']); + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['id'] = $extension_menu['name']; + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['refr'] = 0; + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['icon'] = $extension_menu['icon']; + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['sec'] = 'extensions'; + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['extension'] = true; + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['subfatherId']]['sub2'][$extension_menu['sec2']]['enterprise'] = $extension['enterprise']; + $menu_operation[$extension_menu['fatherId']]['hasExtensions'] = true; + } else { + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['text'] = __($extension_menu['name']); + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['id'] = $extension_menu['name']; + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['refr'] = 0; + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['icon'] = $extension_menu['icon']; + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['sec'] = 'extensions'; + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['extension'] = true; + $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['enterprise'] = $extension['enterprise']; + $menu_operation[$extension_menu['fatherId']]['hasExtensions'] = true; + } } else { $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['text'] = __($extension_menu['name']); $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['id'] = $extension_menu['name']; @@ -596,31 +609,23 @@ if (is_array($config['extensions'])) { $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['enterprise'] = $extension['enterprise']; $menu_operation[$extension_menu['fatherId']]['hasExtensions'] = true; } - } else { - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['text'] = __($extension_menu['name']); - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['id'] = $extension_menu['name']; - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['refr'] = 0; - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['icon'] = $extension_menu['icon']; - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['sec'] = 'extensions'; - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['extension'] = true; - $menu_operation[$extension_menu['fatherId']]['sub'][$extension_menu['sec2']]['enterprise'] = $extension['enterprise']; - $menu_operation[$extension_menu['fatherId']]['hasExtensions'] = true; } } } } - } - if (!empty($sub)) { - $menu_operation['extensions']['text'] = __('Tools'); - $menu_operation['extensions']['sec2'] = 'operation/extensions'; - $menu_operation['extensions']['id'] = 'oper-extensions'; - $menu_operation['extensions']['sub'] = $sub; + if (!empty($sub)) { + $menu_operation['extensions']['text'] = __('Tools'); + $menu_operation['extensions']['sec2'] = 'operation/extensions'; + $menu_operation['extensions']['id'] = 'oper-extensions'; + $menu_operation['extensions']['sub'] = $sub; + } } + + // ~ } } -// ~ } // Save operation menu array to use in operation/extensions.php view $operation_menu_array = $menu_operation; diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index d2dfe12735..bcf94e5320 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.763 -%define release 220729 +%define release 220810 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index bf87bb435c..1b8b25e573 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.763 -%define release 220729 +%define release 220810 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index 5bd3c26c00..b77bdbc18c 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.763 -%define release 220729 +%define release 220810 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_console/pandoradb.sql b/pandora_console/pandoradb.sql index 9f28db5e20..cb09cfb944 100644 --- a/pandora_console/pandoradb.sql +++ b/pandora_console/pandoradb.sql @@ -3890,7 +3890,7 @@ CREATE TABLE IF NOT EXISTS `tipam_network` ( `name_network` VARCHAR(255) DEFAULT '', `description` TEXT, `location` INT UNSIGNED NULL, - `id_recon_task` INT UNSIGNED NOT NULL, + `id_recon_task` INT UNSIGNED DEFAULT 0, `scan_interval` TINYINT DEFAULT 1, `monitoring` TINYINT DEFAULT 0, `id_group` MEDIUMINT UNSIGNED NULL DEFAULT 0, @@ -3899,7 +3899,7 @@ CREATE TABLE IF NOT EXISTS `tipam_network` ( `id_site` BIGINT UNSIGNED, `vrf` INT UNSIGNED, PRIMARY KEY (`id`), - FOREIGN KEY (`id_recon_task`) REFERENCES trecon_task(`id_rt`) ON DELETE CASCADE, + FOREIGN KEY (`id_recon_task`) REFERENCES trecon_task(`id_rt`) ON DELETE SET NULL ON UPDATE CASCADE, FOREIGN KEY (`location`) REFERENCES `tipam_network_location`(`id`) ON DELETE CASCADE, FOREIGN KEY (`id_site`) REFERENCES `tipam_sites`(`id`) ON DELETE SET NULL ON UPDATE CASCADE, FOREIGN KEY (`vrf`) REFERENCES `tagente`(`id_agente`) ON DELETE SET NULL ON UPDATE CASCADE diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index 75ca8759c3..3aa6577c74 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-server -Version: 7.0NG.763-220729 +Version: 7.0NG.763-220810 Architecture: all Priority: optional Section: admin diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh index 1618488084..deee16da82 100644 --- a/pandora_server/DEBIAN/make_deb_package.sh +++ b/pandora_server/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.763-220729" +pandora_version="7.0NG.763-220810" package_cpan=0 package_pandora=1 diff --git a/pandora_server/conf/pandora_server.conf.new b/pandora_server/conf/pandora_server.conf.new index cc62c41324..8911629b2a 100644 --- a/pandora_server/conf/pandora_server.conf.new +++ b/pandora_server/conf/pandora_server.conf.new @@ -723,6 +723,9 @@ alertserver_threads 4 # Generate an hourly warning event if alert execution is being delayed more than alertserver_warn seconds. alertserver_warn 180 +# If set to 1, alerts are queued for the Pandora FMS Alert Server.If alertserver is set to 1, alerts are always queued. +alertserver_queue 0 + # Pandora FMS HA MySQL cluster splitbrain auto-recovery (PANDORA FMS ENTERPRISE ONLY) # IMPORTANT! Please understand and configure all settings from pandora_console/index.php?sec=gservers&sec2=enterprise/godmode/servers/HA_cluster&tab=setup # before enable this feature. diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 32e860c00f..cab87bc999 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -46,7 +46,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.763"; -my $pandora_build = "220729"; +my $pandora_build = "220810"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash @@ -550,6 +550,7 @@ sub pandora_load_config { $pa_config->{"alertserver"} = 0; # 7.0 756 $pa_config->{"alertserver_threads"} = 1; # 7.0 756 $pa_config->{"alertserver_warn"} = 180; # 7.0 756 + $pa_config->{"alertserver_queue"} = 0; # 7.0 764 $pa_config->{'ncmserver'} = 0; # 7.0 758 $pa_config->{'ncmserver_threads'} = 1; # 7.0 758 @@ -1284,6 +1285,9 @@ sub pandora_load_config { elsif ($parametro =~ m/^alertserver_warn\s+([0-9]*)/i) { $pa_config->{'alertserver_warn'}= clean_blank($1); } + elsif ($parametro =~ m/^alertserver_queue\s+([0-1]*)/i) { + $pa_config->{'alertserver_queue'}= clean_blank($1); + } elsif ($parametro =~ m/^ncmserver\s+([0-9]*)/i){ $pa_config->{'ncmserver'}= clean_blank($1); } diff --git a/pandora_server/lib/PandoraFMS/Core.pm b/pandora_server/lib/PandoraFMS/Core.pm index 16c0ecb0ba..168dd1ed63 100644 --- a/pandora_server/lib/PandoraFMS/Core.pm +++ b/pandora_server/lib/PandoraFMS/Core.pm @@ -795,7 +795,7 @@ sub pandora_process_alert ($$$$$$$$;$$) { db_do($dbh, 'UPDATE talert_template_module_actions SET last_execution = 0 WHERE id_alert_template_module = ?', $id); } - if ($pa_config->{'alertserver'} == 1) { + if ($pa_config->{'alertserver'} == 1 || $pa_config->{'alertserver_queue'} == 1) { pandora_queue_alert($pa_config, $dbh, [$data, $agent, $module, $alert, 0, $timestamp, 0, $extra_macros, $is_correlated_alert]); } else { diff --git a/pandora_server/lib/PandoraFMS/DiscoveryServer.pm b/pandora_server/lib/PandoraFMS/DiscoveryServer.pm index 3297f3ec9b..98cce399ed 100644 --- a/pandora_server/lib/PandoraFMS/DiscoveryServer.pm +++ b/pandora_server/lib/PandoraFMS/DiscoveryServer.pm @@ -1546,6 +1546,25 @@ sub PandoraFMS::Recon::Base::report_scanned_agents($;$) { ); } + # Update OS information. + foreach my $agent (@agents) { + + # Avoid processing if does not exist. + next unless (defined($agent->{'agent_id'})); + + # Make sure OS version information is available. + next unless (defined($agent->{'os_version'})); + + # Is the agent in learning mode? + next unless ($agent->{'modo'} == 1); + + # Set the OS version. + db_do($self->{'dbh'}, + 'UPDATE tagente SET os_version=? WHERE id_agente=?', + $agent->{'os_version'}, $agent->{'agent_id'} + ); + } + # Connect agents. my @connections = get_db_rows( $self->{'dbh'}, @@ -1595,9 +1614,12 @@ sub PandoraFMS::Recon::Base::report_scanned_agents($;$) { next if is_empty($label); - # Retrieve target agent OS version. + # Retrieve target agent OS. $self->{'agents_found'}->{$addr}{'agent'}{'id_os'} = $self->guess_os($addr); + # Retrieve target agent OS version. + $self->{'agents_found'}->{$addr}{'agent'}{'os_version'} = $self->get_os_version($addr); + $self->call('update_progress', $progress); $progress += $step; # Store temporally. Wait user approval. diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index 02ecaa85ce..6cf6fd2cd0 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -34,7 +34,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.763"; -my $pandora_build = "220729"; +my $pandora_build = "220810"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/lib/PandoraFMS/Recon/Base.pm b/pandora_server/lib/PandoraFMS/Recon/Base.pm index 66d47a782a..5fa1dd8d1c 100644 --- a/pandora_server/lib/PandoraFMS/Recon/Base.pm +++ b/pandora_server/lib/PandoraFMS/Recon/Base.pm @@ -78,7 +78,7 @@ our $IPROUTEIFINDEX = ".1.3.6.1.2.1.4.21.1.2"; our $IPROUTENEXTHOP = ".1.3.6.1.2.1.4.21.1.7"; our $IPROUTETYPE = ".1.3.6.1.2.1.4.21.1.8"; our $PRTMARKERINDEX = ".1.3.6.1.2.1.43.10.2.1.1"; -our $SYSDESCR = ".1.3.6.1.2.1.1.1"; +our $SYSDESCR = ".1.3.6.1.2.1.1.1.0"; our $SYSSERVICES = ".1.3.6.1.2.1.1.7"; our $SYSUPTIME = ".1.3.6.1.2.1.1.3"; our $VTPVLANIFINDEX = ".1.3.6.1.4.1.9.9.46.1.3.1.1.18.1"; @@ -554,6 +554,27 @@ sub gateway_connectivity($$) { $self->mark_connected($gw, '', $host, ''); } +################################################################################ +# Retrieve OS version via SNMP. +################################################################################ +sub get_os_version($$) { + my ($self, $device) = @_; + + # OS detection disabled. + return '' if ($self->{'os_detection'} == 0); + + # Does the device respond to SNMP? + return '' unless ($self->is_snmp_discovered($device)); + + # Retrieve the system description, which should contain the OS version. + my $os_version = $self->snmp_get_value($device, "$PandoraFMS::Recon::Base::SYSDESCR"); + + # Remove leading and trailing quotes. + $os_version = $1 if ($os_version =~ /^"(.*)"$/); + + return defined($os_version) ? $os_version : ''; +} + ################################################################################ # Find IP address aliases for the given device. ################################################################################ diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index d1d5778c86..32b38e1393 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.763 -%define release 220729 +%define release 220810 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index 536486573b..e6e1c1fc00 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.763 -%define release 220729 +%define release 220810 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index 624c9cc8e5..19f4724df3 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.763" -PI_BUILD="220729" +PI_BUILD="220810" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index 1b6fbd5620..742a54e6f3 100755 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -35,7 +35,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.763 Build 220729"; +my $version = "7.0NG.763 Build 220810"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index a521012ebd..330c1dcc21 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.763 Build 220729"; +my $version = "7.0NG.763 Build 220810"; # save program name for logging my $progname = basename($0);