diff --git a/src/main/java/org/nrg/xnat/event/listeners/SiteConfigPreferenceHandler.java b/src/main/java/org/nrg/xnat/event/listeners/SiteConfigPreferenceHandler.java index 9bfb37682226014efbcb899e875cb6a3bf0c1514..2eb63876ac84953db7e60ea8b820ec1db0464b35 100644 --- a/src/main/java/org/nrg/xnat/event/listeners/SiteConfigPreferenceHandler.java +++ b/src/main/java/org/nrg/xnat/event/listeners/SiteConfigPreferenceHandler.java @@ -4,6 +4,8 @@ import org.apache.commons.codec.binary.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nrg.framework.event.entities.EventSpecificFields; +import org.nrg.prefs.events.AbstractPreferenceHandler; +import org.nrg.prefs.events.PreferenceHandlerMethod; import org.nrg.xdat.XDAT; import org.nrg.xdat.preferences.SiteConfigPreferenceEvent; import org.nrg.xdat.preferences.SiteConfigPreferences; @@ -21,107 +23,92 @@ import reactor.bus.EventBus; import reactor.fn.Consumer; import javax.inject.Inject; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.Set; +import java.util.*; import java.util.concurrent.ScheduledFuture; -import static reactor.bus.selector.Selectors.type; - @Service -public class SiteConfigPreferenceHandler implements Consumer<Event<SiteConfigPreferenceEvent>> { - - @Inject public SiteConfigPreferenceHandler( EventBus eventBus ){ - eventBus.on(type(SiteConfigPreferenceEvent.class), this); - } - - @Override - public void accept(Event<SiteConfigPreferenceEvent> event) { - final SiteConfigPreferenceEvent scpEvent = event.getData(); - handleEvent(scpEvent); - } +public class SiteConfigPreferenceHandler extends AbstractPreferenceHandler<SiteConfigPreferenceEvent> { - public void handleEvent(SiteConfigPreferenceEvent e) { - Set<EventSpecificFields> fields = e.getEventSpecificFields(); - if(fields!=null) { - for (EventSpecificFields field : fields) { - if (StringUtils.equals(field.getFieldName(), "aliasTokenTimeout")) { - updateAliasTokenTimeout(e); - } - else if (StringUtils.equals(field.getFieldName(), "aliasTokenTimeoutSchedule")) { - updateAliasTokenTimeout(e); - } - else if (StringUtils.equals(field.getFieldName(), "inactivityBeforeLockout")) { - updateInactivityBeforeLockout(e); - } - else if (StringUtils.equals(field.getFieldName(), "inactivityBeforeLockoutSchedule")) { - updateInactivityBeforeLockout(e); - } - else if (StringUtils.equals(field.getFieldName(), "maxFailedLoginsLockoutDuration")) { - updateResetFailedLogins(e); - } - else if (StringUtils.equals(field.getFieldName(), "resetFailedLoginsSchedule")) { - updateResetFailedLogins(e); - } - } - } - } - - private void updateAliasTokenTimeout(SiteConfigPreferenceEvent e){ - try { - XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().setRemoveOnCancelPolicy(true); - Iterator<Runnable> iter = XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().getQueue().iterator(); - - for(ScheduledFuture temp: scheduledAliasTokenTimeouts){ - temp.cancel(false); - } - - scheduledAliasTokenTimeouts.add(XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").schedule(new ClearExpiredAliasTokens(_template),new CronTrigger(XDAT.getSiteConfigPreferences().getAliasTokenTimeoutSchedule()))); - - } catch (Exception e1) { - _log.error("", e1); - } + @Inject + public SiteConfigPreferenceHandler(final EventBus eventBus){ + super(SiteConfigPreferences.SITE_CONFIG_TOOL_ID, eventBus); } - private void updateInactivityBeforeLockout(SiteConfigPreferenceEvent e){ - try { - XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().setRemoveOnCancelPolicy(true); - Iterator<Runnable> iter = XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().getQueue().iterator(); - - for(ScheduledFuture temp: scheduledInactivityBeforeLockout){ - temp.cancel(false); - } - - scheduledInactivityBeforeLockout.add(XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").schedule(new DisableInactiveUsers((new Long(SiteConfigPreferences.convertPGIntervalToSeconds(XDAT.getSiteConfigPreferences().getInactivityBeforeLockout()))).intValue(),(new Long(SiteConfigPreferences.convertPGIntervalToSeconds(XDAT.getSiteConfigPreferences().getMaxFailedLoginsLockoutDuration()))).intValue()),new CronTrigger(XDAT.getSiteConfigPreferences().getInactivityBeforeLockoutSchedule()))); - - } catch (Exception e1) { - _log.error("", e1); - } - } - - private void updateResetFailedLogins(SiteConfigPreferenceEvent e){ - try { - XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().setRemoveOnCancelPolicy(true); - Iterator<Runnable> iter = XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().getQueue().iterator(); - - for(ScheduledFuture temp: scheduledResetFailedLogins){ - temp.cancel(false); - } - - scheduledResetFailedLogins.add(XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").schedule(new ResetFailedLogins(_template,XDAT.getSiteConfigPreferences().getMaxFailedLoginsLockoutDuration()),new CronTrigger(XDAT.getSiteConfigPreferences().getResetFailedLoginsSchedule()))); - - } catch (Exception e1) { - _log.error("", e1); - } - } +// if (StringUtils.equals(field.getFieldName(), "aliasTokenTimeout")) { +// updateAliasTokenTimeout(e); +// } +// else if (StringUtils.equals(field.getFieldName(), "aliasTokenTimeoutSchedule")) { +// updateAliasTokenTimeout(e); +// } +// else if (StringUtils.equals(field.getFieldName(), "inactivityBeforeLockout")) { +// updateInactivityBeforeLockout(e); +// } +// else if (StringUtils.equals(field.getFieldName(), "inactivityBeforeLockoutSchedule")) { +// updateInactivityBeforeLockout(e); +// } +// else if (StringUtils.equals(field.getFieldName(), "maxFailedLoginsLockoutDuration")) { +// updateResetFailedLogins(e); +// } +// else if (StringUtils.equals(field.getFieldName(), "resetFailedLoginsSchedule")) { +// updateResetFailedLogins(e); +// } +// +// } +// +// private void updateAliasTokenTimeout(SiteConfigPreferenceEvent e){ +// try { +// XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().setRemoveOnCancelPolicy(true); +// Iterator<Runnable> iter = XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().getQueue().iterator(); +// +// for(ScheduledFuture temp: scheduledAliasTokenTimeouts){ +// temp.cancel(false); +// } +// +// scheduledAliasTokenTimeouts.add(XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").schedule(new ClearExpiredAliasTokens(_template),new CronTrigger(XDAT.getSiteConfigPreferences().getAliasTokenTimeoutSchedule()))); +// +// } catch (Exception e1) { +// _log.error("", e1); +// } +// } +// +// private void updateInactivityBeforeLockout(SiteConfigPreferenceEvent e){ +// try { +// XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().setRemoveOnCancelPolicy(true); +// Iterator<Runnable> iter = XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().getQueue().iterator(); +// +// for(ScheduledFuture temp: scheduledInactivityBeforeLockout){ +// temp.cancel(false); +// } +// +// scheduledInactivityBeforeLockout.add(XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").schedule(new DisableInactiveUsers((new Long(SiteConfigPreferences.convertPGIntervalToSeconds(XDAT.getSiteConfigPreferences().getInactivityBeforeLockout()))).intValue(),(new Long(SiteConfigPreferences.convertPGIntervalToSeconds(XDAT.getSiteConfigPreferences().getMaxFailedLoginsLockoutDuration()))).intValue()),new CronTrigger(XDAT.getSiteConfigPreferences().getInactivityBeforeLockoutSchedule()))); +// +// } catch (Exception e1) { +// _log.error("", e1); +// } +// } +// +// private void updateResetFailedLogins(SiteConfigPreferenceEvent e){ +// try { +// XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().setRemoveOnCancelPolicy(true); +// Iterator<Runnable> iter = XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().getQueue().iterator(); +// +// for(ScheduledFuture temp: scheduledResetFailedLogins){ +// temp.cancel(false); +// } +// +// scheduledResetFailedLogins.add(XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").schedule(new ResetFailedLogins(_template,XDAT.getSiteConfigPreferences().getMaxFailedLoginsLockoutDuration()),new CronTrigger(XDAT.getSiteConfigPreferences().getResetFailedLoginsSchedule()))); +// +// } catch (Exception e1) { +// _log.error("", e1); +// } +// } @Autowired @Lazy private JdbcTemplate _template; private static final Log _log = LogFactory.getLog(SiteConfigPreferenceHandler.class); - - private ArrayList<ScheduledFuture> scheduledAliasTokenTimeouts = new ArrayList<ScheduledFuture>(); private ArrayList<ScheduledFuture> scheduledInactivityBeforeLockout = new ArrayList<ScheduledFuture>(); + private ArrayList<ScheduledFuture> scheduledResetFailedLogins = new ArrayList<ScheduledFuture>(); } diff --git a/src/main/java/org/nrg/xnat/event/listeners/methods/AbstractSiteConfigPreferenceHandlerMethod.java b/src/main/java/org/nrg/xnat/event/listeners/methods/AbstractSiteConfigPreferenceHandlerMethod.java new file mode 100644 index 0000000000000000000000000000000000000000..43c7ef720b720878266965802b787736f07b6572 --- /dev/null +++ b/src/main/java/org/nrg/xnat/event/listeners/methods/AbstractSiteConfigPreferenceHandlerMethod.java @@ -0,0 +1,11 @@ +package org.nrg.xnat.event.listeners.methods; + +import org.nrg.prefs.events.PreferenceHandlerMethod; +import org.nrg.xdat.preferences.SiteConfigPreferences; + +public abstract class AbstractSiteConfigPreferenceHandlerMethod implements PreferenceHandlerMethod { + @Override + public String getToolId() { + return SiteConfigPreferences.SITE_CONFIG_TOOL_ID; + } +} diff --git a/src/main/java/org/nrg/xnat/event/listeners/methods/AliasTokenPreferenceHandlerMethod.java b/src/main/java/org/nrg/xnat/event/listeners/methods/AliasTokenPreferenceHandlerMethod.java new file mode 100644 index 0000000000000000000000000000000000000000..b7b068b3a397bbd754821a5d6c2e4caa1a3820b1 --- /dev/null +++ b/src/main/java/org/nrg/xnat/event/listeners/methods/AliasTokenPreferenceHandlerMethod.java @@ -0,0 +1,61 @@ +package org.nrg.xnat.event.listeners.methods; + +import com.google.common.collect.ImmutableList; +import org.nrg.prefs.events.PreferenceHandlerMethod; +import org.nrg.xdat.XDAT; +import org.nrg.xdat.preferences.SiteConfigPreferenceEvent; +import org.nrg.xnat.security.alias.ClearExpiredAliasTokens; +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.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.scheduling.support.CronTrigger; +import org.springframework.stereotype.Component; + +import java.util.*; +import java.util.concurrent.ScheduledFuture; + +@Component +public class AliasTokenPreferenceHandlerMethod extends AbstractSiteConfigPreferenceHandlerMethod { + @Override + public List<String> getHandledPreferences() { + return PREFERENCES; + } + + @Override + public void handlePreferences(final Map<String, String> values) { + + } + + @Override + public void handlePreference(final String preference, final String value) { + + } + + private void updateAliasTokenTimeout(SiteConfigPreferenceEvent e){ + try { + XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().setRemoveOnCancelPolicy(true); + Iterator<Runnable> iter = XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().getQueue().iterator(); + + for(ScheduledFuture temp: scheduledAliasTokenTimeouts){ + temp.cancel(false); + } + + scheduledAliasTokenTimeouts.add(XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").schedule(new ClearExpiredAliasTokens(_template), new CronTrigger(XDAT.getSiteConfigPreferences().getAliasTokenTimeoutSchedule()))); + + } catch (Exception e1) { + _log.error("", e1); + } + } + + private static final Logger _log = LoggerFactory.getLogger(AliasTokenPreferenceHandlerMethod.class); + private static final List<String> PREFERENCES = ImmutableList.copyOf(Arrays.asList("aliasTokenTimeout", "aliasTokenTimeoutSchedule")); + + @Autowired + @Lazy + private JdbcTemplate _template; + + private ArrayList<ScheduledFuture> scheduledAliasTokenTimeouts = new ArrayList<>(); +}