Cleanup service interface, make it easier and less error prone when creating new...
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / idp / profile / IdPProfileHandlerManager.java
index 928b95a..0a20620 100644 (file)
 package edu.internet2.middleware.shibboleth.idp.profile;
 
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
-import java.util.Timer;
 import java.util.concurrent.locks.Lock;
 
 import javax.servlet.ServletRequest;
 import javax.servlet.http.HttpServletRequest;
 
-import org.opensaml.util.resource.Resource;
-import org.opensaml.xml.util.Pair;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.context.ApplicationContext;
@@ -37,7 +33,6 @@ import edu.internet2.middleware.shibboleth.common.profile.ProfileHandler;
 import edu.internet2.middleware.shibboleth.common.profile.ProfileHandlerManager;
 import edu.internet2.middleware.shibboleth.common.profile.provider.AbstractRequestURIMappedProfileHandler;
 import edu.internet2.middleware.shibboleth.idp.authn.LoginHandler;
-import edu.internet2.middleware.shibboleth.idp.authn.LoginContext;
 
 /**
  * Implementation of a {@link ProfileHandlerManager} that maps the request path, without the servlet context, to a
@@ -54,32 +49,14 @@ public class IdPProfileHandlerManager extends BaseReloadableService implements P
     /** Map of request paths to profile handlers. */
     private Map<String, AbstractRequestURIMappedProfileHandler> profileHandlers;
 
-    /** Map of authentication methods to authentication handlers. */
-    private Map<String, LoginHandler> authenticationHandlers;
+    /** Map of authentication methods to login handlers. */
+    private Map<String, LoginHandler> loginHandlers;
 
-    /**
-     * Constructor. Configuration resources are not monitored for changes.
-     * 
-     * @param configurations configuration resources for this service
-     */
-    public IdPProfileHandlerManager(List<Resource> configurations) {
-        super(configurations);
-        profileHandlers = new HashMap<String, AbstractRequestURIMappedProfileHandler>();
-        authenticationHandlers = new HashMap<String, LoginHandler>();
-    }
-
-    /**
-     * Constructor.
-     * 
-     * @param timer timer resource polling tasks are scheduled with
-     * @param configurations configuration resources for this service
-     * @param pollingFrequency the frequency, in milliseconds, to poll the policy resources for changes, must be greater
-     *            than zero
-     */
-    public IdPProfileHandlerManager(List<Resource> configurations, Timer timer, long pollingFrequency) {
-        super(timer, configurations, pollingFrequency);
+    /** Constructor. */
+    public IdPProfileHandlerManager() {
+        super();
         profileHandlers = new HashMap<String, AbstractRequestURIMappedProfileHandler>();
-        authenticationHandlers = new HashMap<String, LoginHandler>();
+        loginHandlers = new HashMap<String, LoginHandler>();
     }
 
     /** {@inheritDoc} */
@@ -130,58 +107,16 @@ public class IdPProfileHandlerManager extends BaseReloadableService implements P
     }
 
     /**
-     * Gets the authentication handler appropriate for the given loging context. The mechanism used to determine the
-     * "appropriate" handler is implementation specific.
-     * 
-     * @param loginContext current login context
-     * 
-     * @return authentication method URI and handler appropriate for given login context
-     */
-    public Pair<String, LoginHandler> getAuthenticationHandler(LoginContext loginContext) {
-        log.debug("{}: Looking up authentication method for relying party {}", getId(), loginContext
-                .getRelyingPartyId());
-
-        List<String> requestedMethods = loginContext.getRequestedAuthenticationMethods();
-        if (requestedMethods != null) {
-            LoginHandler candidateHandler;
-            for (String requestedMethod : requestedMethods) {
-                log.debug(getId() + "{}: Checking for authentication handler for method {}", getId(), requestedMethod);
-                candidateHandler = authenticationHandlers.get(requestedMethod);
-                if (candidateHandler != null) {
-                    log.debug(getId()
-                            + "{}: Authentication handler for method {} found.  Checking if it meets othe criteria.",
-                            getId(), requestedMethod);
-
-                    if (loginContext.getPassiveAuth() && !candidateHandler.supportsPassive()) {
-                        log.debug("{}: Authentication handler for method {} does not meet required support for passive auth.  Skipping it",
-                                        getId(), requestedMethod);
-                        continue;
-                    }
-
-                    log.debug(getId() + "{}: Authentication handler for method {}  meets all requirements, using it.",
-                            getId(), requestedMethod);
-                    return new Pair<String, LoginHandler>(requestedMethod, candidateHandler);
-                }
-            }
-        } else {
-            log.error("{}: No requested authentication methods for relying party {}", getId(), loginContext
-                    .getRelyingPartyId());
-        }
-
-        return null;
-    }
-
-    /**
      * Gets the registered authentication handlers.
      * 
      * @return registered authentication handlers
      */
-    public Map<String, LoginHandler> getAuthenticationHandlers() {
-        return authenticationHandlers;
+    public Map<String, LoginHandler> getLoginHandlers() {
+        return loginHandlers;
     }
 
     /** {@inheritDoc} */
-    protected void newContextCreated(ApplicationContext newServiceContext) {
+    protected void onNewContextCreated(ApplicationContext newServiceContext) {
         log.debug("{}: Loading new configuration into service", getId());
         Lock writeLock = getReadWriteLock().writeLock();
         writeLock.lock();
@@ -233,7 +168,7 @@ public class IdPProfileHandlerManager extends BaseReloadableService implements P
         String[] authnBeanNames = newServiceContext.getBeanNamesForType(LoginHandler.class);
         log.debug("{}: Loading {} new authentication handlers.", getId(), authnBeanNames.length);
 
-        authenticationHandlers.clear();
+        loginHandlers.clear();
         LoginHandler authnHandler;
         for (String authnBeanName : authnBeanNames) {
             authnHandler = (LoginHandler) newServiceContext.getBean(authnBeanName);
@@ -241,7 +176,7 @@ public class IdPProfileHandlerManager extends BaseReloadableService implements P
                     authnHandler.getSupportedAuthenticationMethods());
 
             for (String authnMethod : authnHandler.getSupportedAuthenticationMethods()) {
-                authenticationHandlers.put(authnMethod, authnHandler);
+                loginHandlers.put(authnMethod, authnHandler);
             }
         }
     }