<?php /** * ______ ___ _______ _______ ________ * | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __| * | __/| _ | | _ || _ | _| _ | | ___| |__ | * |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______| * * ============================================================================ * Copyright (c) 2005-2019 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; check_login(); if (! check_acl($config['id_user'], 0, 'PM') && ! is_user_admin($config['id_user'])) { db_pandora_audit('ACL Violation', 'Trying to access Setup Management'); include 'general/noaccess.php'; return; } // Check custom field. $custom_field = db_get_value('name', 'tagent_custom_fields', 'name', $config['ehorus_custom_field']); $custom_field_exists = !empty($custom_field); $custom_field_created = null; if ($config['ehorus_enabled'] && !$custom_field_exists) { $values = [ 'name' => $config['ehorus_custom_field'], 'display_on_front' => 1, ]; $result = (bool) db_process_sql_insert('tagent_custom_fields', $values); $custom_field_exists = $custom_field_created = $result; } // Enable table. $table_enable = new StdClass(); $table_enable->data = []; $table_enable->width = '100%'; $table_enable->id = 'ehorus-enable-setup'; $table_enable->class = 'databox filters'; $table_enable->size['name'] = '30%'; $table_enable->style['name'] = 'font-weight: bold'; // Enable eHorus. $row = []; $row['name'] = __('Enable eHorus'); $row['control'] = html_print_checkbox_switch('ehorus_enabled', 1, $config['ehorus_enabled'], true); $table_enable->data['ehorus_enabled'] = $row; // Remote config table. $table_remote = new StdClass(); $table_remote->data = []; $table_remote->width = '100%'; $table_remote->styleTable = 'margin-bottom: 10px;'; $table_remote->id = 'ehorus-remote-setup'; $table_remote->class = 'databox filters'; $table_remote->size['name'] = '30%'; $table_remote->style['name'] = 'font-weight: bold'; // Enable eHorus user configuration. $row = []; $row['name'] = ('eHorus configuration at user level'); $row['control'] = html_print_checkbox_switch('ehorus_user_level_conf', 1, $config['ehorus_user_level_conf'], true); $table_remote->data['ehorus_user_level_conf'] = $row; // User. $row = []; $row['name'] = __('User'); $row['control'] = html_print_input_text('ehorus_user', $config['ehorus_user'], '', 30, 100, true); $table_remote->data['ehorus_user'] = $row; // Pass. $row = []; $row['name'] = __('Password'); $row['control'] = html_print_input_password('ehorus_pass', io_output_password($config['ehorus_pass']), '', 30, 100, true); $table_remote->data['ehorus_pass'] = $row; // Directory hostname. $row = []; $row['name'] = __('API Hostname'); $row['control'] = html_print_input_text('ehorus_hostname', $config['ehorus_hostname'], '', 30, 100, true); $row['control'] .= ui_print_help_tip(__('Hostname of the eHorus API').'. '.__('Without protocol and port').'. '.__('e.g., portal.ehorus.com'), true); $table_remote->data['ehorus_hostname'] = $row; // Directory port. $row = []; $row['name'] = __('API Port'); $row['control'] = html_print_input_text('ehorus_port', $config['ehorus_port'], '', 6, 100, true); $row['control'] .= ui_print_help_tip(__('e.g., 18080'), true); $table_remote->data['ehorus_port'] = $row; // Request timeout. $row = []; $row['name'] = __('Request timeout'); $row['control'] = html_print_input_text('ehorus_req_timeout', $config['ehorus_req_timeout'], '', 3, 10, true); $row['control'] .= ui_print_help_tip(__('Time in seconds to set the maximum time of the requests to the eHorus API').'. '.__('0 to disable'), true); $table_remote->data['ehorus_req_timeout'] = $row; // Test. $row = []; $row['name'] = __('Test'); $row['control'] = html_print_button(__('Start'), 'test-ehorus', false, '', 'class="sub next"', true); $row['control'] .= '<span id="test-ehorus-spinner" style="display:none;"> '.html_print_image('images/spinner.gif', true).'</span>'; $row['control'] .= '<span id="test-ehorus-success" style="display:none;"> '.html_print_image('images/status_sets/default/severity_normal.png', true).'</span>'; $row['control'] .= '<span id="test-ehorus-failure" style="display:none;"> '.html_print_image('images/status_sets/default/severity_critical.png', true).'</span>'; $row['control'] .= ' <span id="test-ehorus-message" style="display:none;"></span>'; $table_remote->data['ehorus_test'] = $row; // Print. echo '<div style="text-align: center; padding-bottom: 20px;">'; echo '<a target="_blank" rel="noopener noreferrer" href="http://ehorus.com">'; html_print_image('include/ehorus/images/ehorus-logo-grey.png'); echo '</a>'; echo '<br />'; echo '<div style="font-family: lato, "Helvetica Neue", Helvetica, Arial, sans-serif; color: #515151;">'; echo __('Remote Management System'); echo '</div>'; echo '<a target="_blank" rel="noopener noreferrer" href="https://ehorus.com">'; echo 'https://ehorus.com'; echo '</a>'; echo '</div>'; if ($custom_field_created !== null) { ui_print_result_message($custom_field_created, __('Custom field eHorusID created'), __('Error creating custom field')); } if ($custom_field_created) { $info_messsage = __('eHorus has his own agent identifiers'); $info_messsage .= '. '.__('To store them, it will be necessary to use an agent custom field'); $info_messsage .= '.<br />'.__('Possibly the eHorus id will have to be filled in by hand for every agent').'.'; ui_print_info_message($info_messsage); } if ($config['ehorus_enabled'] && !$custom_field_exists) { $error_message = __('The custom field does not exists already'); ui_print_error_message($error_message); } echo "<form method='post'>"; // Form enable. echo '<div id="form_enable">'; html_print_input_hidden('update_config', 1); html_print_table($table_enable); echo '</div>'; // Form remote. echo '<div id="form_remote">'; echo '<fieldset>'; echo '<legend>'.__('eHorus API').'</legend>'; html_print_input_hidden('update_config', 1); html_print_table($table_remote); echo '</fieldset>'; echo '</div>'; echo '<div class="action-buttons" style="width: '.$table_remote->width.'">'; html_print_submit_button(__('Update'), 'update_button', false, 'class="sub upd"'); echo '</div>'; echo '</form>'; ?> <script type="text/javascript"> if(!$('input:checkbox[name="ehorus_enabled"]').is(':checked')) { $('#form_remote').hide(); } if($('input:checkbox[name="ehorus_user_level_conf"]').is(':checked')) { $('#ehorus-remote-setup-ehorus_user').hide(); $('#ehorus-remote-setup-ehorus_pass').hide() } $('#form_enable').css('margin-bottom','20px'); var showFields = function () { $('#form_remote').show(); } var hideFields = function () { $('#form_remote').hide(); } var hideUserPass = function () { $('#ehorus-remote-setup-ehorus_user').hide(); $('#ehorus-remote-setup-ehorus_pass').hide(); } var showUserPass = function () { $('#ehorus-remote-setup-ehorus_user').show(); $('#ehorus-remote-setup-ehorus_pass').show(); } var handleEnable = function (event) { var is_checked = $('input:checkbox[name="ehorus_enabled"]').is(':checked'); if (event.target.value == '1' && is_checked) { showFields(); $('input:checkbox[name="ehorus_enabled"]').attr('checked', true); } else { hideFields(); $('input:checkbox[name="ehorus_enabled"]').attr('checked', false); }; } var handleUserLevel = function(event) { var is_checked = $('input:checkbox[name="ehorus_enabled"]').is(':checked'); var is_checked_userlevel = $('input:checkbox[name="ehorus_user_level_conf"]').is(':checked'); if (event.target.value == '1' && is_checked && !is_checked_userlevel) { showUserPass(); $('input:checkbox[name="ehorus_user_level_conf"]').attr('checked', true); } else { hideUserPass(); $('input:checkbox[name="ehorus_user_level_conf"]').attr('checked', false); }; } $('input:checkbox[name="ehorus_enabled"]').change(handleEnable); $('input:checkbox[name="ehorus_user_level_conf"]').change(handleUserLevel); var handleTest = function (event) { var user = $('input#text-ehorus_user').val(); var pass = $('input#password-ehorus_pass').val(); var host = $('input#text-ehorus_hostname').val(); var port = $('input#text-ehorus_port').val(); var timeout = Number.parseInt($('input#text-ehorus_req_timeout').val(), 10); var is_checked_user_level = $('input:checkbox[name="ehorus_user_level_conf"]').is(':checked'); var timeoutMessage = '<?php echo __('Connection timeout'); ?>'; var badRequestMessage = '<?php echo __('Empty user or password'); ?>'; var notFoundMessage = '<?php echo __('User not found'); ?>'; var invalidPassMessage = '<?php echo __('Invalid password'); ?>'; var hideLoadingImage = function () { $('span#test-ehorus-spinner').hide(); } var showLoadingImage = function () { $('span#test-ehorus-spinner').show(); } var hideSuccessImage = function () { $('span#test-ehorus-success').hide(); } var showSuccessImage = function () { $('span#test-ehorus-success').show(); } var hideFailureImage = function () { $('span#test-ehorus-failure').hide(); } var showFailureImage = function () { $('span#test-ehorus-failure').show(); } var hideMessage = function () { $('span#test-ehorus-message').hide(); } var showMessage = function () { $('span#test-ehorus-message').show(); } var changeTestMessage = function (message) { $('span#test-ehorus-message').text(message); } hideSuccessImage(); hideFailureImage(); hideMessage(); showLoadingImage(); $.ajax({ url: 'https://' + host + ':' + port + '/login', type: 'POST', dataType: 'json', timeout: timeout ? timeout * 1000 : 0, data: { user: user, pass: pass } }) .done(function(data, textStatus, xhr) { showSuccessImage(); }) .fail(function(xhr, textStatus, errorThrown) { if((xhr.status === 400 || xhr.status === 403) && is_checked_user_level) { showSuccessImage(); return; }else if (xhr.status === 400) { changeTestMessage(badRequestMessage); } else if (xhr.status === 401 || xhr.status === 403) { changeTestMessage(invalidPassMessage); } else if (xhr.status === 404) { changeTestMessage(notFoundMessage); } else if (errorThrown === 'timeout') { changeTestMessage(timeoutMessage); } else { changeTestMessage(errorThrown); } showFailureImage(); showMessage(); }) .always(function(xhr, textStatus) { hideLoadingImage(); }); } $('input#button-test-ehorus').click(handleTest); </script>