From: <ssk...@re...> - 2005-01-13 18:05:09
|
Author: sskracic Date: 2005-01-13 18:55:13 +0100 (Thu, 13 Jan 2005) New Revision: 175 Modified: ccm-core/trunk/application.xml ccm-core/trunk/src/com/arsdigita/kernel/security/Initializer.java ccm-core/trunk/src/com/arsdigita/kernel/security/LoginConfig.java ccm-core/trunk/src/com/arsdigita/kernel/security/SecurityConfig.java Log: It turned out that 'Request' and 'Register' login contexts are not always sufficient. All login contexts are configured through the single parameter waf.login_config, hopefully the syntax is not that horrible. Modified: ccm-core/trunk/application.xml =================================================================== --- ccm-core/trunk/application.xml 2005-01-13 13:06:15 UTC (rev 174) +++ ccm-core/trunk/application.xml 2005-01-13 17:55:13 UTC (rev 175) @@ -3,7 +3,7 @@ <ccm:application name="ccm-core" prettyName="Core" version="6.1.0" - release="20" + release="21" webapp="ROOT" buildHooks="build-hooks.xml" xmlns:ccm="http://ccm.redhat.com/ccm-project"> Modified: ccm-core/trunk/src/com/arsdigita/kernel/security/Initializer.java =================================================================== --- ccm-core/trunk/src/com/arsdigita/kernel/security/Initializer.java 2005-01-13 13:06:15 UTC (rev 174) +++ ccm-core/trunk/src/com/arsdigita/kernel/security/Initializer.java 2005-01-13 17:55:13 UTC (rev 175) @@ -380,9 +380,8 @@ private javax.security.auth.login.Configuration getLoginConfig() throws InitializationException { SecurityConfig conf = Kernel.getSecurityConfig(); - List requestLoginConfig = Arrays.asList(conf.getRequestLoginConfig()); - List registerLoginConfig = Arrays.asList(conf.getRegisterLoginConfig()); - return new LoginConfig(requestLoginConfig, registerLoginConfig); + List loginConfig = Arrays.asList(conf.getLoginConfig()); + return new LoginConfig(loginConfig); } private void checkLoginConfig() throws InitializationException { Modified: ccm-core/trunk/src/com/arsdigita/kernel/security/LoginConfig.java =================================================================== --- ccm-core/trunk/src/com/arsdigita/kernel/security/LoginConfig.java 2005-01-13 13:06:15 UTC (rev 174) +++ ccm-core/trunk/src/com/arsdigita/kernel/security/LoginConfig.java 2005-01-13 17:55:13 UTC (rev 175) @@ -20,6 +20,7 @@ import com.arsdigita.initializer.InitializationException; import com.arsdigita.util.StringUtils; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; @@ -27,6 +28,7 @@ import java.util.Map; import javax.security.auth.login.AppConfigurationEntry; import javax.security.auth.login.Configuration; +import org.apache.log4j.Logger; /** * <p>Parses a login <code>Configuration</code> from an @@ -41,17 +43,25 @@ /** Maps application names to <code>AppConfigurationEntry[]</code>. **/ private Map m_appConfigs = new HashMap(); + private static final Logger s_log = Logger.getLogger(LoginConfig.class); + /** - * <p>Creates a new login configuration. - * Input arguments describe <tt>request</tt> and <tt>register</tt> login contexts. - * Each login context is presented by a <tt>List</tt> of StringS. - * Each list element is formatted like this: + * <p>Creates a new login configuration. <tt>Request</tt> and <tt>Register</tt> + * are mandatory contexts, WAF refuses to start if they are not configured. + * Each login context can span multiple modules. </p> * + * <p> The input <tt>List</tt> comprises of <tt>StringS</tt> adhering to the + * following format: </p> + * * <pre> - * moduleName:controlFlag[:option1[:option2[:...]]] + * context:moduleName:controlFlag[:option1[:option2[:...]]] * </pre> * * <dl> + * + * <dt><i>context</i></dt> + * <dd>String</dd> + * * <dt><i>moduleName</i></dt> * <dd>String</dd> * @@ -67,23 +77,33 @@ * * <p>Example:</p> * - * <p>Request context:</p> * <pre> - * com.arsdigita.kernel.security.CredentialLoginModule:requisite:debug=true + * Request:com.arsdigita.kernel.security.CredentialLoginModule:requisite:debug=true + * Register:com.arsdigita.kernel.security.LocalLoginModule:requisite + * Register:com.arsdigita.kernel.security.UserIDLoginModule:requisite + * Register:com.arsdigita.kernel.security.CredentialLoginModule:optional * </pre> * - * <p>Register context:</p> - * <pre> - * com.arsdigita.kernel.security.LocalLoginModule:requisite - * com.arsdigita.kernel.security.UserIDLoginModule:requisite - * com.arsdigita.kernel.security.CredentialLoginModule:optional - * </pre> - * * @throws InitializationException if there is a parsing error. **/ - public LoginConfig(List requestConfig, List registerConfig) throws InitializationException { - addAppConfig(UserContext.REQUEST_LOGIN_CONTEXT, requestConfig); - addAppConfig(UserContext.REGISTER_LOGIN_CONTEXT, registerConfig); + public LoginConfig(List config) throws InitializationException { + Map contextConfigs = new HashMap(); + for (int i = 0; i < config.size(); i++) { + String tuple = (String) config.get(i); + int pos = tuple.indexOf(':'); + String context = tuple.substring(0, pos); + String moduleConf = tuple.substring(pos+1); + List contextConfig = (List) contextConfigs.get(context); + if (contextConfig == null) { + contextConfig = new ArrayList(); + contextConfigs.put(context, contextConfig); + } + contextConfig.add(moduleConf); + } + for (Iterator it = contextConfigs.keySet().iterator(); it.hasNext(); ) { + String context = (String) it.next(); + addAppConfig(context, (List) contextConfigs.get(context)); + } } private void addAppConfig(String name, List entries) Modified: ccm-core/trunk/src/com/arsdigita/kernel/security/SecurityConfig.java =================================================================== --- ccm-core/trunk/src/com/arsdigita/kernel/security/SecurityConfig.java 2005-01-13 13:06:15 UTC (rev 174) +++ ccm-core/trunk/src/com/arsdigita/kernel/security/SecurityConfig.java 2005-01-13 17:55:13 UTC (rev 175) @@ -59,20 +59,16 @@ ("waf.pagemap.permission", Parameter.REQUIRED, "permissions/"); private final Parameter m_permSinglePage = new StringParameter ("waf.pagemap.perm_single", Parameter.REQUIRED, "permissions/one"); - private final Parameter m_requestLoginConfig = new StringArrayParameter - ("waf.login_config.request", Parameter.REQUIRED, new String[] { - "com.arsdigita.kernel.security.AdminLoginModule:sufficient", - "com.arsdigita.kernel.security.RecoveryLoginModule:sufficient", - "com.arsdigita.kernel.security.CookieLoginModule:requisite" + private final Parameter m_loginConfig = new StringArrayParameter + ("waf.login_config", Parameter.REQUIRED, new String[] { + "Request:com.arsdigita.kernel.security.AdminLoginModule:sufficient", + "Request:com.arsdigita.kernel.security.RecoveryLoginModule:sufficient", + "Request:com.arsdigita.kernel.security.CookieLoginModule:requisite", + "Register:com.arsdigita.kernel.security.LocalLoginModule:requisite", + "Register:com.arsdigita.kernel.security.UserIDLoginModule:requisite", + "Register:com.arsdigita.kernel.security.CookieLoginModule:optional" } ); - private final Parameter m_registerLoginConfig = new StringArrayParameter - ("waf.login_config.register", Parameter.REQUIRED, new String[] { - "com.arsdigita.kernel.security.LocalLoginModule:requisite", - "com.arsdigita.kernel.security.UserIDLoginModule:requisite", - "com.arsdigita.kernel.security.CookieLoginModule:optional" - } - ); public SecurityConfig() { @@ -88,8 +84,7 @@ register(m_loginRedirectPage); register(m_permissionPage); register(m_permSinglePage); - register(m_requestLoginConfig); - register(m_registerLoginConfig); + register(m_loginConfig); loadInfo(); } @@ -129,11 +124,8 @@ String getPermSinglePage() { return (String) get(m_permSinglePage); } - String[] getRequestLoginConfig() { - return (String[]) get(m_requestLoginConfig); + String[] getLoginConfig() { + return (String[]) get(m_loginConfig); } - String[] getRegisterLoginConfig() { - return (String[]) get(m_registerLoginConfig); - } } |