From 21e289460ab07291c5789dcd94083cfc9c6f016b Mon Sep 17 00:00:00 2001
From: Mike McKay <mfmckay@wustl.edu>
Date: Wed, 1 Jun 2016 09:28:29 -0500
Subject: [PATCH] Made changes to the Site-wide Anonymization Script take
 effect.

---
 .../methods/AnonymizationHandlerMethod.java   | 77 +++++++++++++++++++
 1 file changed, 77 insertions(+)
 create mode 100644 src/main/java/org/nrg/xnat/event/listeners/methods/AnonymizationHandlerMethod.java

diff --git a/src/main/java/org/nrg/xnat/event/listeners/methods/AnonymizationHandlerMethod.java b/src/main/java/org/nrg/xnat/event/listeners/methods/AnonymizationHandlerMethod.java
new file mode 100644
index 00000000..3b3fe215
--- /dev/null
+++ b/src/main/java/org/nrg/xnat/event/listeners/methods/AnonymizationHandlerMethod.java
@@ -0,0 +1,77 @@
+package org.nrg.xnat.event.listeners.methods;
+
+import com.google.common.collect.ImmutableList;
+import org.nrg.xdat.XDAT;
+import org.nrg.xdat.security.helpers.Roles;
+import org.nrg.xdat.security.helpers.Users;
+import org.nrg.xft.security.UserI;
+import org.nrg.xnat.helpers.editscript.DicomEdit;
+import org.nrg.xnat.helpers.merge.AnonUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class AnonymizationHandlerMethod extends AbstractSiteConfigPreferenceHandlerMethod {
+    @Override
+    public List<String> getHandledPreferences() {
+        return PREFERENCES;
+    }
+
+    @Override
+    public void handlePreferences(final Map<String, String> values) {
+        if (!Collections.disjoint(PREFERENCES, values.keySet())) {
+            updateInactivityBeforeLockout();
+        }
+    }
+
+    @Override
+    public void handlePreference(final String preference, final String value) {
+        if(PREFERENCES.contains(preference)){
+            updateInactivityBeforeLockout();
+        }
+    }
+
+	private void updateInactivityBeforeLockout(){
+        try {
+            if (XDAT.getSiteConfigPreferences().getEnableSitewideAnonymizationScript()) {
+                AnonUtils.getService().enableSiteWide(getAdminUser().getLogin(), DicomEdit.buildScriptPath(DicomEdit.ResourceScope.SITE_WIDE, null));
+            } else {
+                AnonUtils.getService().disableSiteWide(getAdminUser().getLogin(), DicomEdit.buildScriptPath(DicomEdit.ResourceScope.SITE_WIDE, null));
+            }
+        }
+        catch(Exception e){
+            _log.error("Failed to enable/disable sitewide anon script.",e);
+        }
+        try {
+            AnonUtils.getService().setSiteWideScript(getAdminUser().getLogin(), DicomEdit.buildScriptPath(DicomEdit.ResourceScope.SITE_WIDE, null), XDAT.getSiteConfigPreferences().getSitewideAnonymizationScript());
+        }
+        catch(Exception e){
+            _log.error("Failed to set sitewide anon script.",e);
+        }
+    }
+
+    private static final Logger       _log        = LoggerFactory.getLogger(AnonymizationHandlerMethod.class);
+    private static final List<String> PREFERENCES = ImmutableList.copyOf(Arrays.asList("enableSitewideAnonymizationScript", "sitewideAnonymizationScript"));
+
+    private UserI getAdminUser() throws Exception {
+        for (String login : Users.getAllLogins()) {
+            final UserI user = Users.getUser(login);
+            if (Roles.isSiteAdmin(user)) {
+                return user;
+            }
+        }
+        return null;
+    }
+    @Autowired
+    @Lazy
+    private JdbcTemplate _template;
+}
-- 
GitLab