/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.cocoon.webapps.authentication.configuration; import java.io.Serializable; import java.util.HashMap; import java.util.Hashtable; import java.util.Map; import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.cocoon.ProcessingException; import org.apache.cocoon.environment.Request; import org.apache.cocoon.webapps.authentication.components.PipelineAuthenticator; import org.apache.excalibur.source.SourceParameters; /** * The authentication Handler. * * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a> * @deprecated This block is deprecated and will be removed in future versions. * @version CVS $Id$ */ public final class HandlerConfiguration implements Serializable { /** The unique name of the handler */ private final String name; /** The redirect-to URI */ private String redirectURI; /** The redirect parameters */ private SourceParameters redirectParameters; /** The authentication resource */ private String authenticationResource; /** The logout resource */ private String logoutResource; /** The class name of the authenticator to use */ private String authenticatorClass; /** The authentication resource parameters */ private SourceParameters authenticationResourceParameters; /** The load resource (optional) */ private String loadResource; /** The load resource (optional) parameters */ private SourceParameters loadResourceParameters; /** The save resource (optional) */ private String saveResource; /** The save resource (optional) parameters */ private SourceParameters saveResourceParameters; /** The Application Configurations */ private Map applications = new Hashtable(3, 2); /** The configuration fragments */ private Map configurations; /** Save the context on logout */ private boolean saveOnLogout = false; /** * Create a new handler object. */ public HandlerConfiguration(String name) { this.name = name; this.configurations = new HashMap(3, 2); } /** * Configure */ public void configure(Request request, Configuration conf) throws ProcessingException, ConfigurationException { // get login (required) Configuration child = conf.getChild("redirect-to", false); if (child == null) throw new ConfigurationException("Handler '"+this.name+"' needs a redirect-to URI."); this.redirectURI = child.getAttribute("uri"); if ( this.redirectURI.startsWith("cocoon:") ) { final int pos = this.redirectURI.indexOf('/'); if ( pos != -1 && this.redirectURI.length() > pos) { if (this.redirectURI.charAt(pos+1) == '/') { this.redirectURI = this.redirectURI.substring(pos+2).trim(); this.redirectURI = request.getContextPath()+"/"+this.redirectURI; } else { this.redirectURI = this.redirectURI.substring(pos+1).trim(); } } } this.redirectParameters = SourceParameters.create(child); // get load resource (required) child = conf.getChild("authentication", false); if (child == null) { throw new ConfigurationException("Handler '"+this.name+"' needs authentication configuration"); } this.authenticatorClass = child.getAttribute("authenticator", PipelineAuthenticator.class.getName()); if ( PipelineAuthenticator.class.getName().equals(authenticatorClass)) { this.authenticationResource = child.getAttribute("uri"); } else { // the uri attribute is optional for other authenticators this.authenticationResource = child.getAttribute("uri", null); } // optinal logout resource this.logoutResource = child.getAttribute("logout-uri", null); this.authenticationResourceParameters = SourceParameters.create(child); // get load resource (optional) child = conf.getChild("load", false); if (child != null) { this.loadResource = child.getAttribute("uri"); this.loadResourceParameters = SourceParameters.create(child); } // get save resource (optional) child = conf.getChild("save", false); if (child != null) { this.saveResource = child.getAttribute("uri"); this.saveResourceParameters = SourceParameters.create(child); this.saveOnLogout = child.getAttributeAsBoolean("saveOnLogout", false); } // And now: Applications child = conf.getChild("applications", false); if (child != null) { Configuration[] appConfs = child.getChildren("application"); Configuration appconf; if (appConfs != null) { for(int i = 0; i < appConfs.length; i++) { appconf = appConfs[i]; // get name String appName = appconf.getAttribute("name"); // test if handler is unique if (this.applications.get(appName) != null) { throw new ConfigurationException("Application names must be unique: " + appName); } // create handler ApplicationConfiguration apphandler = new ApplicationConfiguration(this, appName); // store handler this.applications.put(appName, apphandler); // configure apphandler.configure(appconf); } } } // get configurations (optional) Configuration[] configurations = conf.getChildren("configuration"); if (configurations != null) { for(int i = 0; i < configurations.length; i++) { child = configurations[i]; String value = child.getAttribute("name"); if (this.getConfiguration(value) != null) { throw new ConfigurationException("Configuration names must be unique for application " + this.name + ": " + value); } this.configurations.put(value, child); } } } /** * Get the handler name. */ public String getName() { return name; } /** * Get the redirect URI */ public String getRedirectURI() { return this.redirectURI; } /** * Get the redirect parameters */ public SourceParameters getRedirectParameters() { return this.redirectParameters; } /** * Get the authentication resource */ public String getAuthenticationResource() { return this.authenticationResource; } /** * Get the authentication resource */ public SourceParameters getAuthenticationResourceParameters() { return this.authenticationResourceParameters; } /** * Get the logout resource */ public String getLogoutResource() { return this.logoutResource; } /** Get the save resource */ public String getSaveResource() { return this.saveResource; } /** Get the load resource */ public String getLoadResource() { return this.loadResource; } /** Should we save on logout? */ public boolean saveOnLogout() { return this.saveOnLogout; } /** Get the save resource */ public SourceParameters getSaveResourceParameters() { return this.saveResourceParameters; } /** Get the load resource parameters */ public SourceParameters getLoadResourceParameters() { return this.loadResourceParameters; } /** * Get the applications map */ public Map getApplications() { return applications; } /** * Get the configuration */ public Configuration getConfiguration(String name) { return (Configuration)this.configurations.get(name); } /** * toString() */ public String toString() { return "authentication handler '" + this.name + "' (" + super.toString() + ')'; } /** * Return the authenticator class */ public String getAuthenticatorClassName() { return this.authenticatorClass; } }