pandorafms/pandora_console/operation/snmpconsole/snmp_browser.php

754 lines
23 KiB
PHP

<?php
/**
* SMNP Browser view
*
* @category Monitoring
* @package Pandora FMS
* @subpackage Community
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2023 Pandora FMS
* 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.
* ============================================================================
*/
// Begin.
global $config;
require_once $config['homedir'].'/include/functions_snmp_browser.php';
ui_require_javascript_file('pandora_snmp_browser');
ui_require_jquery_file('pandora.controls');
// Check login and ACLs.
check_login();
if (!check_acl($config['id_user'], 0, 'AR')) {
db_pandora_audit(
AUDIT_LOG_ACL_VIOLATION,
'Trying to access SNMP Console'
);
include 'general/noaccess.php';
exit();
}
$url = 'index.php?sec=snmpconsole&sec2=operation/snmpconsole/snmp_browser&pure='.$config['pure'];
if ($config['pure']) {
// Windowed.
$link['text'] = '<a target="_top" href="'.$url.'&pure=0&refr=30">';
$link['text'] .= html_print_image(
'images/exit_fullscreen@svg.svg',
true,
[
'title' => __('Normal screen'),
'class' => 'main_menu_icon invert_filter',
]
);
$link['text'] .= '</a>';
} else {
// Fullscreen.
$link['text'] = '<a target="_top" href="'.$url.'&pure=1&refr=0">';
$link['text'] .= html_print_image(
'images/fullscreen@svg.svg',
true,
[
'title' => __('Full screen'),
'class' => 'main_menu_icon invert_filter',
]
);
$link['text'] .= '</a>';
}
// Control from managent polices.
if ($_POST['type'] !== 'networkserver') {
// Header.
ui_print_standard_header(
__('SNMP Browser'),
'images/op_snmp.png',
false,
'snmp_browser_view',
false,
[$link],
[
[
'link' => '',
'label' => __('Monitoring'),
],
[
'link' => '',
'label' => __('SNMP'),
],
]
);
// SNMP tree container.
if (!isset($_GET['tab'])) {
snmp_browser_print_container(false, '100%', '60%', '', true, true);
}
}
// Div for modal.
echo '<div id="modal" style="display:none"></div>';
// Div for loading modal.
echo '<div id="loading_modal" style="display:none"></div>';
?>
<script type="text/javascript">
// Show button for add module to agent on oid detail.
$(document).on('DOMSubtreeModified', "#snmp_create_module", function() {
$('#button-create_module_agent_single').show();
});
$(document).on("click", 'div#snmp_create_buttons > button', function (event) {
var source_button = this.name;
var target = "";
switch (source_button) {
case "create_modules_agent":
target = "agent";
break;
case "create_modules_policy":
target = "policy";
break;
case "create_modules_network_component":
target = "network_component";
break;
default:
target = "network_component";
break;
}
if (target === "network_component") {
waiting_modal();
snmp_browser_create_modules("network_component", false);
} else {
snmp_browser_show_add_module_massive(target);
}
});
/**
*
* Show select to add massive snmp modules.
*
* @param {string} target The target where module will be created (agent/policy).
*/
function snmp_browser_show_add_module_massive(module_target = 'agent') {
var module_target = module_target;
var title = '<?php echo __('Add modules'); ?>';
var snmp_extradata = snmp_browser_create_modules(module_target);
snmp_extradata.push({name:"target_port", value:$("#target_port").val()});
// Load dinamically modal form.
load_modal({
form: 'snmp_browser_add_module_form',
extradata: [
{
name: 'module_target',
value: module_target,
},
],
ajax_callback: snmp_show_result_message,
cleanup: cleanupDOM,
onsubmitClose: true,
form: 'create_module_massive',
url: '<?php echo ui_get_full_url('ajax.php', false, false, false); ?>',
modal: {
title: title,
cancel: '<?php echo __('Cancel'); ?>',
ok: '<?php echo __('Add modules'); ?>',
},
onload: function (data) {
// Add policy button handler.
if (module_target == 'policy') {
$('#button-snmp_browser_create_policy').click(function () {
snmp_browser_show_add_policy();
});
}
},
onshow: {
extradata: snmp_extradata,
page: 'include/ajax/snmp_browser.ajax',
method: 'snmp_browser_print_create_module_massive',
},
onsubmit: {
preaction: modal_preaction,
page: 'include/ajax/snmp_browser.ajax',
method: 'snmp_browser_create_modules',
},
});
}
/**
* Select all items in select box.
*
* @return void
*/
function modal_preaction() {
// Select all in select box.
$('#id_item2>option').prop('selected', true);
// Load adding modules modal.
waiting_modal();
}
function waiting_modal(stop = false) {
var waiting_modal =
'<div id="loading_in_progress_dialog" class="center">' +
'<?php echo __('Adding modules in progress'); ?> <br /><br />' +
'<?php echo html_print_image('images/spinner.gif', true); ?> </div>';
$('#loading_modal').html(waiting_modal);
$('#loading_modal')
.dialog({
title: '<?php echo __('Action in progress'); ?>',
resizable: true,
draggable: true,
modal: true,
close: false,
height: 100,
width: 200,
overlay: {
opacity: 0.5,
background: "black"
}
})
.show();
if(stop) {
$('#loading_modal').dialog("close");
}
}
/**
* Show error/success message.
*
* @param mixed data Fail modules.
*/
function snmp_show_result_message(data) {
// Stop waiting modal.
waiting_modal(stop);
var dato = JSON.parse(data);
if (dato.length !== 0) {
$("#error_text").text("");
if (dato[0] === -1) {
$("#dialog_no_agents_selected").dialog({
resizable: true,
draggable: true,
modal: true,
height: 300,
width: 500,
close: function(e, ui) {
$("button[name=create_modules_network_component]").removeClass("sub spinn");
$("button[name=create_modules_network_component]").addClass("sub add");
},
overlay: {
opacity: 0.5,
background: "black"
}
});
} else {
$("#error_text").text("");
dato.forEach(function (valor, indice, array) {
$("#error_text").append("<br/>" + valor);
});
$("#dialog_error").dialog({
resizable: true,
draggable: true,
modal: true,
height: 300,
width: 500,
overlay: {
opacity: 0.5,
background: "black"
}
});
}
} else {
$("#dialog_success").dialog({
resizable: true,
draggable: true,
modal: true,
height: 250,
width: 500,
overlay: {
opacity: 0.5,
background: "black"
}
});
}
}
/**
* When invoking modals from JS, some DOM id could be repeated.
* This method cleans DOM to avoid duplicated IDs.
*/
function cleanupDOM() {
$("#modal").empty();
}
/**
* Controls internal add module massive dialog behaviour.
*
* @param string $target
* @return void
*/
function add_module_massive_controller(target = 'agent')
{
// Load items from groups.
filter_by_group($("#group").val(), '', target);
// Change group listener.
$("select[name='group']").change(function(){
filter_by_group($(this).val(), '', target);
});
// Item filter search listener
$("#text-filter").keyup (function () {
$('#loading_filter').show();
refresh_item($(this).val(), items_out_keys, items_out, $("#id_item"));
});
// Select all Items.
$("#image-select_all_available").click(function (event) {
event.preventDefault();
$('#id_item>option').prop('selected', true);
})
$("#image-select_all_apply").click(function (event) {
event.preventDefault();
$('#id_item2>option').prop('selected', true);
});
$("#checkbox-select_all_right").change(function () {
if ($("#checkbox-select_all_right").prop('checked') == true) {
$('#id_item2 option').map(function() {
$(this).prop('selected', true);
});
} else {
$('#id_item2 option').map(function() {
$(this).prop('selected', false);
});
}
return false;
});
$("#id_item").click(function(e) {
if ($("#checkbox-select_all_left").prop('checked') == true) {
$("#checkbox-select_all_left").prop('checked', false);
}
});
$("#id_item2").click(function(e) {
if ($("#checkbox-select_all_right").prop('checked') == true) {
$("#checkbox-select_all_right").prop('checked', false);
}
});
$(".p-switch").css('display', 'table');
// Select items.
$("#right").click (function () {
jQuery.each($("select[name='id_item[]'] option:selected"), function (key, value) {
item_name = $(value).html();
if (item_name != <?php echo "'".__('None')."'"; ?>){
id_item = $(value).attr('value');
//Remove the none value
$("#id_item2").find("option[value='']").remove();
$("select[name='id_item2[]']").append($("<option>").val(id_item).html('<i>' + item_name + '</i>'));
$("#id_item").find("option[value='" + id_item + "']").remove();
}
});
});
$("#left").click(function() {
jQuery.each($("select[name='id_item2[]'] option:selected"), function (key, value) {
item_name = $(value).html();
if (item_name != <?php echo "'".__('None')."'"; ?>){
id_item = $(value).attr('value');
$("select[name='id_item[]']").append($("<option>").val(id_item).html('<i>' + item_name + '</i>'));
$("#id_item2").find("option[value='" + id_item + "']").remove();
}
//If empty the selectbox
if ($("#id_item2 option").length == 0) {
$("select[name='id_item2[]']")
.append($("<option>").val("")
.html("<?php echo __('None'); ?>"));
}
});
});
}
/**
* Get agents by group dinamically..
*
* @param {number} id_group
* @param {string} id_select
* @param {string} module_target
*/
function filter_by_group(id_group, id_select, module_target) {
$('#loading_group').show();
var params = {};
$('#id_item' + id_select).empty ();
search = $("#text-filter" + id_select).val();
params["id_group"] = id_group;
params["search"]= search;
switch (module_target) {
case 'agent':
page = "godmode/groups/group_list";
method = 'get_group_agents';
break;
case 'policy':
page = "enterprise/include/ajax/policy.ajax";
method = 'get_policies_by_group';
break;
default:
page = '';
method = '';
break;
}
params['page'] = page;
if(method != '') {
params[method] = 1;
}
jQuery.ajax ({
data: params,
type: "POST",
url: "ajax.php",
dataType: "json",
success: function (data, status) {
var group_items = new Array();
var group_items_keys = new Array();
jQuery.each (data, function (id, value) {
group_items.push(value);
group_items_keys.push(id);
});
if(id_select == '') {
items_out_keys = group_items_keys;
items_out = group_items;
}
else {
items_in_keys = group_items_keys;
items_in = group_agents;
}
refresh_item($("#text-filter"+id_select).attr('value'), items_out_keys, items_out, $("#id_item"+id_select));
},
});
}
function refresh_item(start_search, keys, values, select) {
var n = 0;
var i = 0;
select.empty();
$('#id_item2 option').each(function(){
var out_agent = $(this).val();
if (out_agent) {
keys.forEach(function(it) {
var it_data = it;
if (it_data == out_agent) {
var index = keys.indexOf(it);
// Remove from array!
values.splice(index, 1);
keys.splice(index, 1);
}
});
}
});
values.forEach(function(item) {
var re = new RegExp(start_search,"gi");
match = item.match(re);
if (match != null) {
select.append ($("<option></option>").attr("value", keys[n]).html(values[n]));
i++;
}
n++;
});
if (i == 0) {
$(select).empty ();
$(select).append ($("<option></option>").attr ("value", 0).html (' <?php echo __('None'); ?> '));
}
$('.loading_div').hide();
}
function snmp_browser_show_add_policy() {
var title = '<?php __('Create new policy'); ?>';
load_modal({
target: $('#policy_modal'),
form: 'snmp_browser_add_policy_form',
ajax_callback: snmp_browser_add_policy_callback,
idMsgCallback: 'snmp_result_msg',
url: '<?php echo ui_get_full_url('ajax.php', false, false, false); ?>',
modal: {
title: title,
cancel: '<?php echo __('Cancel'); ?>',
ok: '<?php echo __('Create policy'); ?>',
},
onshow: {
page: 'include/ajax/snmp_browser.ajax',
method: 'snmp_browser_print_create_policy',
width: 550,
},
onsubmit: {
page: 'include/ajax/snmp_browser.ajax',
method: 'snmp_browser_create_policy',
},
onload: function () {
$('#id_group').pandoraSelectGroupIcon();
}
});
}
function snmp_browser_add_policy_callback(data, idMsg) {
data = JSON.parse(data);
//Show message
var title = data.title[data.error];
var text = data.text[data.error];
var failed = !data.error;
$("#" + idMsg).empty();
$("#" + idMsg).html(text);
$("#" + idMsg).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) {
filter_by_group($("#group").val(), '', 'policy');
}
$(this).dialog("close");
$('#policy_modal').dialog("close");
}
}
]
});
}
/**
* Shows dialog to select agent to add module.
*
*/
function show_add_module() {
var id_agent = 0;
var id_module = 0;
var id_agent_module = $("#id_agent_module").val();
if (id_agent_module) {
// Get SNMP target.
confirmDialog({
title: '<?php echo __('Are you sure?'); ?>',
message: '<?php echo __('Are you sure you want add module?'); ?> ',
ok: '<?php echo __('OK'); ?>',
cancel: '<?php echo __('Cancel'); ?>',
onAccept: function() {
// Get SNMP target.
var snmp_target = {
target_ip : $('#text-target_ip').val(),
community : $('#text-community').val(),
snmp_version : $('#snmp_browser_version').val(),
snmp3_auth_user : $('#text-snmp3_browser_auth_user').val(),
snmp3_security_level : $('#snmp3_browser_security_level').val(),
snmp3_auth_method : $('#snmp3_browser_auth_method').val(),
snmp3_auth_pass : $('#password-snmp3_browser_auth_pass').val(),
snmp3_privacy_method : $('#snmp3_browser_privacy_method').val(),
snmp3_privacy_pass : $('#password-snmp3_browser_privacy_pass').val(),
tcp_port : $('#target_port').val(),
};
// Append values to form.
var input = "";
$.each( snmp_target, function( key, val ) {
input = $("<input>")
.attr("type", "hidden")
.attr("name", key).val(val);
$("#snmp_create_module").append(input);
});
//Submit form to agent module url.
$("#snmp_create_module").attr(
"action",
"index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente="
+id_agent_module+
"&tab=module&edit_module=1"
);
$('#snmp_create_module').submit();
},
onDeny: function () {
$("#dialog_create_module").dialog("close");
return false;
}
});
} else {
$("#dialog_create_module").dialog({
resizable: true,
draggable: true,
modal: true,
width: '300',
height:'auto',
overlay: {
opacity: 0.5,
background: "black"
},
buttons:
[
{
class: "ui-widget ui-state-default ui-corner-all ui-button-text-only sub ok submit-cancel",
text: '<?php echo __('Cancel'); ?>',
click: function() {
$(this).dialog("close");
}
},
{
class: "ui-widget ui-state-default ui-corner-all ui-button-text-only sub ok submit-next",
text: '<?php echo __('Create module'); ?>',
click: function(e) {
confirmDialog({
title: '<?php echo __('Are you sure?'); ?>',
message: '<?php echo __('Are you sure you want add module?'); ?> ',
ok: '<?php echo __('OK'); ?>',
cancel: '<?php echo __('Cancel'); ?>',
onAccept: function() {
// Get id agent and add it to form.
id_agent = $('#hidden-id_agent').val();
// Get SNMP target.
var snmp_target = {
target_ip : $('#text-target_ip').val(),
community : $('#text-community').val(),
snmp_version : $('#snmp_browser_version').val(),
snmp3_auth_user : $('#text-snmp3_browser_auth_user').val(),
snmp3_security_level : $('#snmp3_browser_security_level').val(),
snmp3_auth_method : $('#snmp3_browser_auth_method').val(),
snmp3_auth_pass : $('#password-snmp3_browser_auth_pass').val(),
snmp3_privacy_method : $('#snmp3_browser_privacy_method').val(),
snmp3_privacy_pass : $('#password-snmp3_browser_privacy_pass').val(),
tcp_port : $('#target_port').val(),
};
// Append values to form.
var input = "";
$.each( snmp_target, function( key, val ) {
input = $("<input>")
.attr("type", "hidden")
.attr("name", key).val(val);
$("#snmp_create_module").append(input);
});
//Submit form to agent module url.
$("#snmp_create_module").attr(
"action",
"index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente="
+id_agent+
"&tab=module&edit_module=1"
);
$('#snmp_create_module').submit();
},
onDeny: function () {
$("#dialog_create_module").dialog("close");
return false;
}
});
}
}
],
});
}
}
</script>