/** * Print a HTML code with the content of the logs audited by the remote Sucuri * API service, this page is part of the monitoring tool. * * @return void */ function sucuriscan_auditlogs() { // Initialize the values for the pagination. $max_per_page = SUCURISCAN_AUDITLOGS_PER_PAGE; $page_number = SucuriScanTemplate::pageNumber(); $logs_limit = $page_number * $max_per_page; $audit_logs = SucuriScanAPI::getLogs($logs_limit); $params = array('PageTitle' => 'Audit Logs', 'AuditLogs.List' => '', 'AuditLogs.Count' => 0, 'AuditLogs.MaxPerPage' => $max_per_page, 'AuditLogs.NoItemsVisibility' => 'visible', 'AuditLogs.PaginationVisibility' => 'hidden', 'AuditLogs.PaginationLinks' => '', 'AuditLogs.EnableAuditReportVisibility' => 'hidden'); if ($audit_logs) { $counter_i = 0; $total_items = count($audit_logs->output_data); $iterator_start = ($page_number - 1) * $max_per_page; $iterator_end = $total_items; if ($audit_logs->total_entries >= $max_per_page && SucuriScanOption::is_disabled(':audit_report')) { $params['AuditLogs.EnableAuditReportVisibility'] = 'visible'; } for ($i = $iterator_start; $i < $total_items; $i++) { if ($counter_i > $max_per_page) { break; } if (isset($audit_logs->output_data[$i])) { $audit_log = $audit_logs->output_data[$i]; $css_class = $counter_i % 2 == 0 ? '' : 'alternate'; $snippet_data = array('AuditLog.CssClass' => $css_class, 'AuditLog.Event' => $audit_log['event'], 'AuditLog.EventTitle' => ucfirst($audit_log['event']), 'AuditLog.Timestamp' => $audit_log['timestamp'], 'AuditLog.DateTime' => SucuriScan::datetime($audit_log['timestamp']), 'AuditLog.Account' => $audit_log['account'], 'AuditLog.Username' => $audit_log['username'], 'AuditLog.RemoteAddress' => $audit_log['remote_addr'], 'AuditLog.Message' => $audit_log['message'], 'AuditLog.Extra' => ''); // Print every file_list information item in a separate table. if ($audit_log['file_list']) { $css_scrollable = $audit_log['file_list_count'] > 10 ? 'sucuriscan-list-as-table-scrollable' : ''; $snippet_data['AuditLog.Extra'] .= '<ul class="sucuriscan-list-as-table ' . $css_scrollable . '">'; foreach ($audit_log['file_list'] as $log_extra) { $snippet_data['AuditLog.Extra'] .= '<li>' . SucuriScan::escape($log_extra) . '</li>'; } $snippet_data['AuditLog.Extra'] .= '</ul>'; } $params['AuditLogs.List'] .= SucuriScanTemplate::getSnippet('integrity-auditlogs', $snippet_data); $counter_i += 1; } } $params['AuditLogs.Count'] = $counter_i; $params['AuditLogs.NoItemsVisibility'] = 'hidden'; if ($total_items > 1) { $max_pages = ceil($audit_logs->total_entries / $max_per_page); if ($max_pages > SUCURISCAN_MAX_PAGINATION_BUTTONS) { $max_pages = SUCURISCAN_MAX_PAGINATION_BUTTONS; } if ($max_pages > 1) { $params['AuditLogs.PaginationVisibility'] = 'visible'; $params['AuditLogs.PaginationLinks'] = SucuriScanTemplate::pagination('%%SUCURI.URL.Home%%', $max_per_page * $max_pages, $max_per_page); } } } return SucuriScanTemplate::getSection('integrity-auditlogs', $params); }
function sucuriscan_audit_logs_ajax() { if (SucuriScanRequest::post('form_action') == 'get_audit_logs') { $response = array(); $response['count'] = 0; $response['content'] = ''; $response['enable_report'] = false; // Initialize the values for the pagination. $max_per_page = SUCURISCAN_AUDITLOGS_PER_PAGE; $page_number = SucuriScanTemplate::pageNumber(); $logs_limit = $page_number * $max_per_page; ob_start(); $audit_logs = SucuriScanAPI::getLogs($logs_limit); $errors = ob_get_contents(); ob_end_clean(); if (!empty($errors)) { header('Content-Type: text/html; charset=UTF-8'); print $errors; exit(0); } if ($audit_logs) { $counter_i = 0; $total_items = count($audit_logs['output_data']); $iterator_start = ($page_number - 1) * $max_per_page; if (array_key_exists('total_entries', $audit_logs) && $audit_logs['total_entries'] >= $max_per_page && SucuriScanOption::is_disabled(':audit_report')) { $response['enable_report'] = true; } for ($i = $iterator_start; $i < $total_items; $i++) { if ($counter_i > $max_per_page) { break; } if (isset($audit_logs['output_data'][$i])) { $audit_log = $audit_logs['output_data'][$i]; $css_class = $counter_i % 2 === 0 ? '' : 'alternate'; $snippet_data = array('AuditLog.CssClass' => $css_class, 'AuditLog.Event' => $audit_log['event'], 'AuditLog.EventTitle' => ucfirst($audit_log['event']), 'AuditLog.Timestamp' => $audit_log['timestamp'], 'AuditLog.DateTime' => SucuriScan::datetime($audit_log['timestamp']), 'AuditLog.Account' => $audit_log['account'], 'AuditLog.Username' => $audit_log['username'], 'AuditLog.RemoteAddress' => $audit_log['remote_addr'], 'AuditLog.Message' => $audit_log['message'], 'AuditLog.Extra' => ''); // Print every file_list information item in a separate table. if ($audit_log['file_list']) { $css_scrollable = $audit_log['file_list_count'] > 10 ? 'sucuriscan-list-as-table-scrollable' : ''; $snippet_data['AuditLog.Extra'] .= '<ul class="sucuriscan-list-as-table ' . $css_scrollable . '">'; foreach ($audit_log['file_list'] as $log_extra) { $snippet_data['AuditLog.Extra'] .= '<li>' . SucuriScan::escape($log_extra) . '</li>'; } $snippet_data['AuditLog.Extra'] .= '</ul>'; } $response['content'] .= SucuriScanTemplate::getSnippet('integrity-auditlogs', $snippet_data); $counter_i += 1; } } $response['count'] = $counter_i; if ($total_items > 1) { $max_pages = ceil($audit_logs['total_entries'] / $max_per_page); if ($max_pages > SUCURISCAN_MAX_PAGINATION_BUTTONS) { $max_pages = SUCURISCAN_MAX_PAGINATION_BUTTONS; } if ($max_pages > 1) { $response['pagination'] = SucuriScanTemplate::pagination(SucuriScanTemplate::getUrl(), $max_per_page * $max_pages, $max_per_page); } } } header('Content-Type: application/json'); print json_encode($response); exit(0); } }