array('regexp' => '/^([0-9a-z_A-Z]+)$/'))); /* ==================================================== */ /* present a tabbed interface */ $tabs = array( 'general' => array( 'display' => __('General'), 'url' => CACTI_PATH_URL . 'auth_profile.php?tab=general' ), '2fa' => array( 'display' => __('2FA'), 'url' => CACTI_PATH_URL . 'auth_profile.php?tab=2fa' ), ); $tabs = api_plugin_hook_function('auth_profile_tabs', $tabs); /* set the default tab */ load_current_session_value('tab', 'sess_profile_tabs', 'general'); $current_tab = get_nfilter_request_var('tab'); if (cacti_sizeof($tabs) > 1) { $i = 0; /* draw the tabs */ print "
\n"; } if ($current_tab == 'general') { settings(); settings_javascript(); } elseif ($current_tab == '2fa') { settings_2fa(); } else { api_plugin_hook_function('auth_profile_run_action', get_request_var('tab')); } bottom_footer(); break; } /* -------------------------- The Save Function -------------------------- */ function api_auth_logout_everywhere() { $user = $_SESSION[SESS_USER_ID]; if (!empty($user)) { db_execute_prepared( 'DELETE FROM user_auth_cache WHERE user_id = ?', array($user) ); } } function api_auth_clear_user_settings() { $user = $_SESSION[SESS_USER_ID]; if (!empty($user)) { if (isset_request_var('tab') && get_nfilter_request_var('tab') == 'general') { db_execute_prepared( 'DELETE FROM settings_user WHERE user_id = ?', array($user) ); kill_session_var(OPTIONS_USER); } elseif (isset_request_var('tab')) { api_plugin_hook('auth_profile_reset'); } raise_message('37'); } } function api_auth_clear_user_setting($name) { global $settings_user; $user = $_SESSION[SESS_USER_ID]; if (read_config_option('client_timezone_support') == '0') { unset($settings_user['client_timezone_support']); } if (!empty($user)) { if (isset_request_var('tab') && get_nfilter_request_var('tab') == 'general') { db_execute_prepared( 'DELETE FROM settings_user WHERE user_id = ? AND name = ?', array($user, $name) ); foreach ($settings_user as $tab => $settings) { if (isset($settings[$name])) { if (isset($settings[$name]['default'])) { db_execute_prepared( 'INSERT INTO settings_user (name, value, user_id) VALUES (?, ?, ?)', array($name, $settings[$name]['default'], $user) ); header('Content-Type: application/json'); print json_encode(['id' => $name, 'value' => $settings[$name]['default']]); kill_session_var(OPTIONS_USER); break; } } } } else { api_plugin_hook_function('auth_profile_reset_value', $name); } } } function api_auth_update_user_setting($name, $value) { global $settings_user; $user = $_SESSION[SESS_USER_ID]; if (!empty($user)) { if ($name == 'full_name' || $name == 'email_address') { db_execute_prepared( "UPDATE user_auth SET $name = ? WHERE id = ?", array($value, $user) ); } else { foreach ($settings_user as $tab => $settings) { if (isset($settings[$name])) { db_execute_prepared( 'REPLACE INTO settings_user (name, value, user_id) VALUES (?, ?, ?)', array($name, $value, $user) ); kill_session_var(OPTIONS_USER); kill_session_var('selected_theme'); kill_session_var(SESS_USER_LANGUAGE); break; } } } } } function form_save() { global $settings_user; // Save the users profile information if (isset_request_var('full_name') && isset_request_var('email_address') && isset($_SESSION[SESS_USER_ID])) { db_execute_prepared( 'UPDATE user_auth SET full_name = ?, email_address = ? WHERE id = ?', array( get_nfilter_request_var('full_name'), get_nfilter_request_var('email_address'), $_SESSION[SESS_USER_ID] ) ); } $errors = array(); // Save the users graph settings if they have permission if (is_view_allowed('graph_settings') == true && isset_request_var('tab') && get_nfilter_request_var('tab') == 'general') { save_user_settings($_SESSION[SESS_USER_ID]); } elseif (isset_request_var('tab')) { api_plugin_hook('auth_profile_save'); } if (cacti_sizeof($errors) == 0) { raise_message(1); } else { raise_message(35); foreach ($errors as $error) { raise_message($error); } } /* reset local settings cache so the user sees the new settings */ kill_session_var(SESS_USER_LANGUAGE); kill_session_var(OPTIONS_USER); kill_session_var('selected_theme'); $tab = (isset_request_var('tab') && get_nfilter_request_var('tab')) ? ('?tab=' . get_nfilter_request_var('tab')) : ''; header('Location: auth_profile.php' . $tab); } /* -------------------------- User Settings Functions -------------------------- */ function settings() { global $tabs_graphs, $settings_user, $current_user, $graph_views, $current_user; /* you cannot have per-user graph settings if cacti's user management is not turned on */ if (read_config_option('auth_method') == AUTH_METHOD_NONE) { raise_message(6); return; } if (isset($_SERVER['HTTP_REFERER'])) { $referer = $_SERVER['HTTP_REFERER']; if (strpos($referer, 'auth_profile.php') === false) { $timespan_sel_pos = strpos($referer, '&predefined_timespan'); if ($timespan_sel_pos) { $referer = substr($referer, 0, $timespan_sel_pos); } $_SESSION['profile_referer'] = $referer; } } elseif (!isset($_SESSION['profile_referer'])) { $_SESSION['profile_referer'] = 'graph_view.php'; } form_start('auth_profile.php', 'chk'); html_start_box(__('User Account Details'), '100%', true, '3', 'center', ''); $current_user = db_fetch_row_prepared( 'SELECT * FROM user_auth WHERE id = ?', array($_SESSION[SESS_USER_ID]) ); if (!cacti_sizeof($current_user)) { return; } // Set the graph views the user has permission to unset($graph_views); if (is_view_allowed('show_tree')) { $graph_views[1] = __('Tree View'); } if (is_view_allowed('show_list')) { $graph_views[2] = __('List View'); } if (is_view_allowed('show_preview')) { $graph_views[2] = __('Preview View'); } if (cacti_sizeof($graph_views)) { $settings_user['general']['default_view_mode']['array'] = $graph_views; } else { unset($settings_user['general']['default_view_mode']); } /* file: user_admin.php, action: user_edit (host) */ $fields_user = array( 'username' => array( 'method' => 'value', 'friendly_name' => __('User Name'), 'description' => __('The login name for this user.'), 'value' => '|arg1:username|', 'max_length' => '40', 'size' => '40' ), 'full_name' => array( 'method' => 'textbox', 'friendly_name' => __('Full Name'), 'description' => __('A more descriptive name for this user, that can include spaces or special characters.'), 'value' => '|arg1:full_name|', 'max_length' => '120', 'size' => '60' ), 'email_address' => array( 'method' => 'textbox', 'type' => 'email', 'friendly_name' => __('Email Address'), 'description' => __('An Email Address you be reached at.'), 'value' => '|arg1:email_address|', 'max_length' => '60', 'size' => '60' ), 'clear_settings' => array( 'method' => 'button', 'friendly_name' => __('Clear User Settings'), 'description' => __('Return all User Settings to Default values.'), 'value' => __('Clear User Settings'), 'on_click' => 'clearUserSettings()' ), 'private_data' => array( 'method' => 'button', 'friendly_name' => __('Clear Private Data'), 'description' => __('Clear Private Data including Column sizing.'), 'value' => __('Clear Private Data'), 'on_click' => 'clearPrivateData()' ) ); if (read_config_option('auth_cache_enabled') == 'on') { $fields_user += array( 'logout_everywhere' => array( 'method' => 'button', 'friendly_name' => __('Logout Everywhere'), 'description' => __('Clear all your Login Session Tokens.'), 'value' => __('Logout Everywhere'), 'on_click' => 'logoutEverywhere()' ) ); } draw_edit_form( array( 'config' => array('no_form_tag' => true), 'fields' => inject_form_variables($fields_user, (isset($current_user) ? $current_user : array())) ) ); html_end_box(true, true); if (is_view_allowed('graph_settings') == true) { if (read_config_option('auth_method') != AUTH_METHOD_NONE) { $settings_user['tree']['default_tree_id']['sql'] = get_allowed_trees(false, true); } html_start_box(__('User Settings'), '100%', true, '3', 'center', ''); foreach ($settings_user as $tab_short_name => $tab_fields) { $collapsible = true; print "