From 2280544b74cb58e1834cbeb2451add93f857d3bc Mon Sep 17 00:00:00 2001 From: Lum Date: Wed, 1 Jul 2026 17:17:50 -0700 Subject: [PATCH 1/2] audit events --- .../labkey/api/util/SystemMaintenance.java | 27 +++++++++++++++++-- .../labkey/core/admin/AdminController.java | 23 +++++++++++----- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/api/src/org/labkey/api/util/SystemMaintenance.java b/api/src/org/labkey/api/util/SystemMaintenance.java index 2cb1d59aa4d..2b5dae9fac5 100644 --- a/api/src/org/labkey/api/util/SystemMaintenance.java +++ b/api/src/org/labkey/api/util/SystemMaintenance.java @@ -20,9 +20,14 @@ import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.labkey.api.audit.AuditLogService; +import org.labkey.api.audit.provider.SiteSettingsAuditProvider; +import org.labkey.api.data.Container; import org.labkey.api.data.PropertyManager; import org.labkey.api.data.PropertyManager.WritablePropertyMap; import org.labkey.api.module.ModuleLoader; +import org.labkey.api.security.User; +import org.labkey.api.settings.AbstractWriteableSettingsGroup; import org.labkey.api.settings.AdminConsole; import org.labkey.api.settings.StartupProperty; import org.labkey.api.util.logging.LogHelper; @@ -158,9 +163,16 @@ public static boolean isTimerDisabled() return _timerDisabled; } - public static void setTimeDisabled(boolean disable) + public static void setTimeDisabled(Container container, User user, boolean disable) { _timerDisabled = disable; + + StringBuilder html = new StringBuilder(""); + SiteSettingsAuditProvider.SiteSettingsAuditEvent event = new SiteSettingsAuditProvider.SiteSettingsAuditEvent(container, "The system maintenance setting was changed (see details)."); + AbstractWriteableSettingsGroup.appendDiffRow(html, "Timer Enabled", null, Boolean.toString(!disable)); + html.append("
"); + event.setChanges(html.toString()); + AuditLogService.get().addEvent(user, event); } private final static String SET_NAME = "SystemMaintenance"; @@ -176,7 +188,7 @@ public static SystemMaintenanceProperties getProperties() } // For all tasks that can be disabled, set the enabledTasks to enabled and set the rest to disabled - public static void setProperties(Set enabledTasks, String time) + public static void setProperties(Container container, User user, Set enabledTasks, String time) { WritablePropertyMap writableProps = PropertyManager.getWritableProperties(SET_NAME, true); @@ -192,6 +204,17 @@ public static void setProperties(Set enabledTasks, String time) writableProps.save(); setTimer(); + + StringBuilder html = new StringBuilder(""); + SiteSettingsAuditProvider.SiteSettingsAuditEvent event = new SiteSettingsAuditProvider.SiteSettingsAuditEvent(container, "The system maintenance tasks were changed (see details)."); + AbstractWriteableSettingsGroup.appendDiffRow(html, TIME_PROPERTY_NAME, null, time); + for (String task : enabled) + AbstractWriteableSettingsGroup.appendDiffRow(html, task, null, "ENABLED"); + for (String task : disabled) + AbstractWriteableSettingsGroup.appendDiffRow(html, task, null, "DISABLED"); + html.append("
"); + event.setChanges(html.toString()); + AuditLogService.get().addEvent(user, event); } // Enable all tasksToEnable, disable all tasksToDisable, and don't modify the enabled property for all other tasks diff --git a/core/src/org/labkey/core/admin/AdminController.java b/core/src/org/labkey/core/admin/AdminController.java index fb127f42277..8b075366513 100644 --- a/core/src/org/labkey/core/admin/AdminController.java +++ b/core/src/org/labkey/core/admin/AdminController.java @@ -94,6 +94,7 @@ import org.labkey.api.audit.AuditLogService; import org.labkey.api.audit.AuditTypeEvent; import org.labkey.api.audit.provider.ContainerAuditProvider; +import org.labkey.api.audit.provider.SiteSettingsAuditProvider; import org.labkey.api.cache.CacheManager; import org.labkey.api.cache.CacheStats; import org.labkey.api.cache.TrackingCache; @@ -240,6 +241,7 @@ import org.labkey.api.security.roles.RoleManager; import org.labkey.api.security.roles.SharedViewEditorRole; import org.labkey.api.services.ServiceRegistry; +import org.labkey.api.settings.AbstractWriteableSettingsGroup; import org.labkey.api.settings.AdminConsole; import org.labkey.api.settings.AppProps; import org.labkey.api.settings.ConceptURIProperties; @@ -3604,8 +3606,8 @@ public ModelAndView getView(ConfigureSystemMaintenanceForm form, boolean reshow, @Override public boolean handlePost(ConfigureSystemMaintenanceForm form, BindException errors) { - SystemMaintenance.setTimeDisabled(!form.isEnableSystemMaintenance()); - SystemMaintenance.setProperties(form.getEnable(), form.getMaintenanceTime()); + SystemMaintenance.setTimeDisabled(getContainer(), getUser(), !form.isEnableSystemMaintenance()); + SystemMaintenance.setProperties(getContainer(), getUser(), form.getEnable(), form.getMaintenanceTime()); return true; } @@ -4961,17 +4963,26 @@ public void validateCommand(MissingValuesForm form, Errors errors) @Override public boolean handlePost(MissingValuesForm form, BindException errors) { + Container c = getContainer(); + SiteSettingsAuditProvider.SiteSettingsAuditEvent event = new SiteSettingsAuditProvider.SiteSettingsAuditEvent(c, "The missing value indicators were changed (see details)."); + StringBuilder html = new StringBuilder(""); if (form.isInheritMvIndicators()) { - MvUtil.inheritMvIndicators(getContainer()); - return true; + MvUtil.inheritMvIndicators(c); + AbstractWriteableSettingsGroup.appendDiffRow(html, "Inherit settings", null, "TRUE"); } else { // Javascript should have enforced any constraints - MvUtil.assignMvIndicators(getContainer(), form.getMvIndicators(), form.getMvLabels()); - return true; + MvUtil.assignMvIndicators(c, form.getMvIndicators(), form.getMvLabels()); + for (int i=0; i < form.getMvIndicators().length; i++) + AbstractWriteableSettingsGroup.appendDiffRow(html, form.getMvIndicators()[i], null, form.getMvLabels()[i]); } + html.append("
"); + event.setChanges(html.toString()); + AuditLogService.get().addEvent(getUser(), event); + + return true; } } From ec81e55cdd6376025e89a146d155d4be141b566f Mon Sep 17 00:00:00 2001 From: lum Date: Thu, 2 Jul 2026 15:24:02 -0700 Subject: [PATCH 2/2] more auditing --- api/src/org/labkey/api/util/SystemMaintenance.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/api/src/org/labkey/api/util/SystemMaintenance.java b/api/src/org/labkey/api/util/SystemMaintenance.java index 2b5dae9fac5..9f489c16711 100644 --- a/api/src/org/labkey/api/util/SystemMaintenance.java +++ b/api/src/org/labkey/api/util/SystemMaintenance.java @@ -206,7 +206,8 @@ public static void setProperties(Container container, User user, Set ena setTimer(); StringBuilder html = new StringBuilder(""); - SiteSettingsAuditProvider.SiteSettingsAuditEvent event = new SiteSettingsAuditProvider.SiteSettingsAuditEvent(container, "The system maintenance tasks were changed (see details)."); + SiteSettingsAuditProvider.SiteSettingsAuditEvent event = new SiteSettingsAuditProvider.SiteSettingsAuditEvent(container, + "The system maintenance tasks were changed (see details)."); AbstractWriteableSettingsGroup.appendDiffRow(html, TIME_PROPERTY_NAME, null, time); for (String task : enabled) AbstractWriteableSettingsGroup.appendDiffRow(html, task, null, "ENABLED");