Skip to content

Commit 814cdb0

Browse files
authored
Additional auditing for site settings (#7814)
1 parent b72fe76 commit 814cdb0

2 files changed

Lines changed: 43 additions & 8 deletions

File tree

api/src/org/labkey/api/util/SystemMaintenance.java

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,14 @@
2020
import org.apache.logging.log4j.Logger;
2121
import org.jetbrains.annotations.NotNull;
2222
import org.jetbrains.annotations.Nullable;
23+
import org.labkey.api.audit.AuditLogService;
24+
import org.labkey.api.audit.provider.SiteSettingsAuditProvider;
25+
import org.labkey.api.data.Container;
2326
import org.labkey.api.data.PropertyManager;
2427
import org.labkey.api.data.PropertyManager.WritablePropertyMap;
2528
import org.labkey.api.module.ModuleLoader;
29+
import org.labkey.api.security.User;
30+
import org.labkey.api.settings.AbstractWriteableSettingsGroup;
2631
import org.labkey.api.settings.AdminConsole;
2732
import org.labkey.api.settings.StartupProperty;
2833
import org.labkey.api.util.logging.LogHelper;
@@ -158,9 +163,16 @@ public static boolean isTimerDisabled()
158163
return _timerDisabled;
159164
}
160165

161-
public static void setTimeDisabled(boolean disable)
166+
public static void setTimeDisabled(Container container, User user, boolean disable)
162167
{
163168
_timerDisabled = disable;
169+
170+
StringBuilder html = new StringBuilder("<table>");
171+
SiteSettingsAuditProvider.SiteSettingsAuditEvent event = new SiteSettingsAuditProvider.SiteSettingsAuditEvent(container, "The system maintenance setting was changed (see details).");
172+
AbstractWriteableSettingsGroup.appendDiffRow(html, "Timer Enabled", null, Boolean.toString(!disable));
173+
html.append("</table>");
174+
event.setChanges(html.toString());
175+
AuditLogService.get().addEvent(user, event);
164176
}
165177

166178
private final static String SET_NAME = "SystemMaintenance";
@@ -176,7 +188,7 @@ public static SystemMaintenanceProperties getProperties()
176188
}
177189

178190
// For all tasks that can be disabled, set the enabledTasks to enabled and set the rest to disabled
179-
public static void setProperties(Set<String> enabledTasks, String time)
191+
public static void setProperties(Container container, User user, Set<String> enabledTasks, String time)
180192
{
181193
WritablePropertyMap writableProps = PropertyManager.getWritableProperties(SET_NAME, true);
182194

@@ -192,6 +204,18 @@ public static void setProperties(Set<String> enabledTasks, String time)
192204

193205
writableProps.save();
194206
setTimer();
207+
208+
StringBuilder html = new StringBuilder("<table>");
209+
SiteSettingsAuditProvider.SiteSettingsAuditEvent event = new SiteSettingsAuditProvider.SiteSettingsAuditEvent(container,
210+
"The system maintenance tasks were changed (see details).");
211+
AbstractWriteableSettingsGroup.appendDiffRow(html, TIME_PROPERTY_NAME, null, time);
212+
for (String task : enabled)
213+
AbstractWriteableSettingsGroup.appendDiffRow(html, task, null, "ENABLED");
214+
for (String task : disabled)
215+
AbstractWriteableSettingsGroup.appendDiffRow(html, task, null, "DISABLED");
216+
html.append("</table>");
217+
event.setChanges(html.toString());
218+
AuditLogService.get().addEvent(user, event);
195219
}
196220

197221
// Enable all tasksToEnable, disable all tasksToDisable, and don't modify the enabled property for all other tasks

core/src/org/labkey/core/admin/AdminController.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@
9494
import org.labkey.api.audit.AuditLogService;
9595
import org.labkey.api.audit.AuditTypeEvent;
9696
import org.labkey.api.audit.provider.ContainerAuditProvider;
97+
import org.labkey.api.audit.provider.SiteSettingsAuditProvider;
9798
import org.labkey.api.cache.CacheManager;
9899
import org.labkey.api.cache.CacheStats;
99100
import org.labkey.api.cache.TrackingCache;
@@ -240,6 +241,7 @@
240241
import org.labkey.api.security.roles.RoleManager;
241242
import org.labkey.api.security.roles.SharedViewEditorRole;
242243
import org.labkey.api.services.ServiceRegistry;
244+
import org.labkey.api.settings.AbstractWriteableSettingsGroup;
243245
import org.labkey.api.settings.AdminConsole;
244246
import org.labkey.api.settings.AppProps;
245247
import org.labkey.api.settings.ConceptURIProperties;
@@ -3604,8 +3606,8 @@ public ModelAndView getView(ConfigureSystemMaintenanceForm form, boolean reshow,
36043606
@Override
36053607
public boolean handlePost(ConfigureSystemMaintenanceForm form, BindException errors)
36063608
{
3607-
SystemMaintenance.setTimeDisabled(!form.isEnableSystemMaintenance());
3608-
SystemMaintenance.setProperties(form.getEnable(), form.getMaintenanceTime());
3609+
SystemMaintenance.setTimeDisabled(getContainer(), getUser(), !form.isEnableSystemMaintenance());
3610+
SystemMaintenance.setProperties(getContainer(), getUser(), form.getEnable(), form.getMaintenanceTime());
36093611

36103612
return true;
36113613
}
@@ -4961,17 +4963,26 @@ public void validateCommand(MissingValuesForm form, Errors errors)
49614963
@Override
49624964
public boolean handlePost(MissingValuesForm form, BindException errors)
49634965
{
4966+
Container c = getContainer();
4967+
SiteSettingsAuditProvider.SiteSettingsAuditEvent event = new SiteSettingsAuditProvider.SiteSettingsAuditEvent(c, "The missing value indicators were changed (see details).");
4968+
StringBuilder html = new StringBuilder("<table>");
49644969
if (form.isInheritMvIndicators())
49654970
{
4966-
MvUtil.inheritMvIndicators(getContainer());
4967-
return true;
4971+
MvUtil.inheritMvIndicators(c);
4972+
AbstractWriteableSettingsGroup.appendDiffRow(html, "Inherit settings", null, "TRUE");
49684973
}
49694974
else
49704975
{
49714976
// Javascript should have enforced any constraints
4972-
MvUtil.assignMvIndicators(getContainer(), form.getMvIndicators(), form.getMvLabels());
4973-
return true;
4977+
MvUtil.assignMvIndicators(c, form.getMvIndicators(), form.getMvLabels());
4978+
for (int i=0; i < form.getMvIndicators().length; i++)
4979+
AbstractWriteableSettingsGroup.appendDiffRow(html, form.getMvIndicators()[i], null, form.getMvLabels()[i]);
49744980
}
4981+
html.append("</table>");
4982+
event.setChanges(html.toString());
4983+
AuditLogService.get().addEvent(getUser(), event);
4984+
4985+
return true;
49754986
}
49764987
}
49774988

0 commit comments

Comments
 (0)