mirror of
https://github.com/arsvendg/Stirling-PDF.git
synced 2026-09-15 13:02:58 +02:00
feat(audit): introduce structured Audit API with export, stats, and cleanup endpoints (#4217)
# Description of Changes - Added new REST-based `AuditDashboardController` under `/api/v1/audit` with endpoints for: - Audit data retrieval with pagination (`/data`) - Statistics retrieval (`/stats`) - Export in CSV and JSON (`/export/csv`, `/export/json`) - Cleanup of audit events before a given date (`/cleanup/before`) - Retrieval of distinct audit event types (`/types`) - Extracted web dashboard logic into `AuditDashboardWebController` (view rendering only). - Introduced new API models: - `AuditDataRequest`, `AuditDataResponse` - `AuditExportRequest`, `AuditDateExportRequest` - `AuditStatsResponse` - Extended `PersistentAuditEventRepository` with richer query methods (histograms, counts, top/latest events, distinct principals). - Updated `dashboard.js` to use new API endpoints under `/api/v1/audit`. - Enhanced authentication handlers and user endpoints with `@Audited` annotations for login/logout/password change events. - Cleaned up `LicenseKeyChecker` by removing unused `updateLicenseKey` method. - Moved admin-related controllers into `controller.api` namespace with proper OpenAPI annotations (`@Operation`, `@Tag`). - Improved `CleanUrlInterceptor` whitelist for new query parameters (`days`, `date`). --- ## Checklist ### General - [x] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [x] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md) (if applicable) - [ ] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md) (if applicable) - [x] I have performed a self-review of my own code - [x] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### UI Changes (if applicable) - [ ] Screenshots or videos demonstrating the UI changes are attached (e.g., as comments or direct attachments in the PR) ### Testing (if applicable) - [ ] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md#6-testing) for more details.
This commit is contained in:
@@ -218,7 +218,7 @@ function loadAuditData(targetPage, realPageSize) {
|
||||
showLoading('table-loading');
|
||||
|
||||
// Always request page 0 from server, but with increased page size if needed
|
||||
let url = `/audit/data?page=${requestedPage}&size=${realPageSize}`;
|
||||
let url = `/api/v1/audit/data?page=${requestedPage}&size=${realPageSize}`;
|
||||
|
||||
if (typeFilter) url += `&type=${encodeURIComponent(typeFilter)}`;
|
||||
if (principalFilter) url += `&principal=${encodeURIComponent(principalFilter)}`;
|
||||
@@ -302,7 +302,7 @@ function loadStats(days) {
|
||||
showLoading('user-chart-loading');
|
||||
showLoading('time-chart-loading');
|
||||
|
||||
fetchWithCsrf(`/audit/stats?days=${days}`)
|
||||
fetchWithCsrf(`/api/v1/audit/stats?days=${days}`)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
document.getElementById('total-events').textContent = data.totalEvents;
|
||||
@@ -328,7 +328,7 @@ function exportAuditData(format) {
|
||||
const startDate = exportStartDateFilter.value;
|
||||
const endDate = exportEndDateFilter.value;
|
||||
|
||||
let url = format === 'json' ? '/audit/export/json?' : '/audit/export?';
|
||||
let url = format === 'json' ? '/api/v1/audit/export/json?' : '/api/v1/audit/export/csv?';
|
||||
|
||||
if (type) url += `&type=${encodeURIComponent(type)}`;
|
||||
if (principal) url += `&principal=${encodeURIComponent(principal)}`;
|
||||
@@ -835,7 +835,7 @@ function hideLoading(id) {
|
||||
|
||||
// Load event types from the server for filter dropdowns
|
||||
function loadEventTypes() {
|
||||
fetchWithCsrf('/audit/types')
|
||||
fetchWithCsrf('/api/v1/audit/types')
|
||||
.then(response => response.json())
|
||||
.then(types => {
|
||||
if (!types || types.length === 0) {
|
||||
|
||||
Reference in New Issue
Block a user