From 075983fd692962f8e84964bcaf9d10844e3d0fe2 Mon Sep 17 00:00:00 2001
From: Mike McKay <mfmckay@wustl.edu>
Date: Fri, 27 May 2016 23:43:20 -0500
Subject: [PATCH] Got Secure Channel AdminUI setting to take effect.

---
 .../xnat/configuration/SchedulerConfig.java   |  1 +
 .../methods/RequiredChannelHandlerMethod.java | 54 +++++++++++++++++++
 .../xnat/spawner/site-admin-elements.yaml     |  1 +
 3 files changed, 56 insertions(+)
 create mode 100644 src/main/java/org/nrg/xnat/event/listeners/methods/RequiredChannelHandlerMethod.java

diff --git a/src/main/java/org/nrg/xnat/configuration/SchedulerConfig.java b/src/main/java/org/nrg/xnat/configuration/SchedulerConfig.java
index 3c7cd76e..72b7991a 100644
--- a/src/main/java/org/nrg/xnat/configuration/SchedulerConfig.java
+++ b/src/main/java/org/nrg/xnat/configuration/SchedulerConfig.java
@@ -97,6 +97,7 @@ public class SchedulerConfig implements SchedulingConfigurer {
         _eventService.triggerEvent(new PreferenceEvent("emailPrefix", String.valueOf(XDAT.getNotificationsPreferences().getEmailPrefix())));
         _eventService.triggerEvent(new PreferenceEvent("host", String.valueOf(XDAT.getNotificationsPreferences().getHostname())));
         _eventService.triggerEvent(new PreferenceEvent("requireLogin", String.valueOf(XDAT.getSiteConfigPreferences().getRequireLogin())));
+        _eventService.triggerEvent(new PreferenceEvent("security.channel", String.valueOf(XDAT.getSiteConfigPreferences().getSecurityChannel())));
         for (final TriggerTask triggerTask : _triggerTasks) {
             taskRegistrar.addTriggerTask(triggerTask);
         }
diff --git a/src/main/java/org/nrg/xnat/event/listeners/methods/RequiredChannelHandlerMethod.java b/src/main/java/org/nrg/xnat/event/listeners/methods/RequiredChannelHandlerMethod.java
new file mode 100644
index 00000000..9c9b8210
--- /dev/null
+++ b/src/main/java/org/nrg/xnat/event/listeners/methods/RequiredChannelHandlerMethod.java
@@ -0,0 +1,54 @@
+package org.nrg.xnat.event.listeners.methods;
+
+import com.google.common.collect.ImmutableList;
+import org.nrg.xdat.XDAT;
+import org.nrg.xnat.security.TranslatingChannelProcessingFilter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+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 RequiredChannelHandlerMethod extends AbstractSiteConfigPreferenceHandlerMethod {
+    @Override
+    public List<String> getHandledPreferences() {
+        return PREFERENCES;
+    }
+
+    @Override
+    public void handlePreferences(final Map<String, String> values) {
+        if (!Collections.disjoint(PREFERENCES, values.keySet())) {
+            updateRequiredChannel();
+        }
+    }
+
+    @Override
+    public void handlePreference(final String preference, final String value) {
+        if(PREFERENCES.contains(preference)){
+            updateRequiredChannel();
+        }
+    }
+
+    private void updateRequiredChannel(){
+        _filter.setRequiredChannel(XDAT.getSiteConfigPreferences().getSecurityChannel());
+	}
+
+    private static final Logger       _log        = LoggerFactory.getLogger(RequiredChannelHandlerMethod.class);
+    private static final List<String> PREFERENCES = ImmutableList.copyOf(Arrays.asList("security.channel"));
+
+    @Autowired
+    @Lazy
+    private JdbcTemplate _template;
+
+    @Autowired
+    @Qualifier("channelProcessingFilter")
+    private TranslatingChannelProcessingFilter _filter;
+}
diff --git a/src/main/resources/META-INF/xnat/spawner/site-admin-elements.yaml b/src/main/resources/META-INF/xnat/spawner/site-admin-elements.yaml
index c537974f..a861a15b 100644
--- a/src/main/resources/META-INF/xnat/spawner/site-admin-elements.yaml
+++ b/src/main/resources/META-INF/xnat/spawner/site-admin-elements.yaml
@@ -322,6 +322,7 @@ userLoginsSessionControls:
             name: UI.login_failure_message
             label: Login Failure Message
             description: Text to show when a user fails to login
+            value: "?? XNAT:data:siteConfig:UI.login_failure_message"
         maximumFailedLogins:
             kind: panel.input.number
             id: maximumFailedLogins
-- 
GitLab