From: <ssk...@re...> - 2005-01-13 13:16:06
|
Author: sskracic Date: 2005-01-13 14:06:15 +0100 (Thu, 13 Jan 2005) New Revision: 174 Modified: ccm-core/trunk/application.xml ccm-core/trunk/src/com/arsdigita/core/enterprise.init 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: Login configuration moved out of enterprise.init into security.properties. Currently, due to immutable parameter names, only two login contexts are provided (hardcoded): waf.login_config.request and waf.login_config.register. Both parameters are of type StringArrayParameter and they accept comma separated list of modules. For more info on syntax, check Javadoc for com.arsdigita.kernel.security.LoginConfig. Bumped release number for ccm-core. Modified: ccm-core/trunk/application.xml =================================================================== --- ccm-core/trunk/application.xml 2005-01-12 21:48:04 UTC (rev 173) +++ ccm-core/trunk/application.xml 2005-01-13 13:06:15 UTC (rev 174) @@ -3,7 +3,7 @@ <ccm:application name="ccm-core" prettyName="Core" version="6.1.0" - release="19" + release="20" webapp="ROOT" buildHooks="build-hooks.xml" xmlns:ccm="http://ccm.redhat.com/ccm-project"> Modified: ccm-core/trunk/src/com/arsdigita/core/enterprise.init =================================================================== --- ccm-core/trunk/src/com/arsdigita/core/enterprise.init 2005-01-12 21:48:04 UTC (rev 173) +++ ccm-core/trunk/src/com/arsdigita/core/enterprise.init 2005-01-13 13:06:15 UTC (rev 174) @@ -35,18 +35,6 @@ init com.arsdigita.kernel.security.Initializer { securityHelperClass = "com.arsdigita.kernel.security.DefaultSecurityHelper"; sessionTrackingMethod = "cookie"; - loginConfig = { - "Request", { - {"com.arsdigita.kernel.security.AdminLoginModule", "sufficient"}, - {"com.arsdigita.kernel.security.RecoveryLoginModule", "sufficient"}, - {"com.arsdigita.kernel.security.CookieLoginModule", "requisite"} - }, - "Register", { - {"com.arsdigita.kernel.security.LocalLoginModule", "requisite"}, - {"com.arsdigita.kernel.security.UserIDLoginModule", "requisite"}, - {"com.arsdigita.kernel.security.CookieLoginModule", "optional"} - } - }; excludedExtensions = { ".jpg", ".gif", ".png", ".pdf" }; Modified: ccm-core/trunk/src/com/arsdigita/kernel/security/Initializer.java =================================================================== --- ccm-core/trunk/src/com/arsdigita/kernel/security/Initializer.java 2005-01-12 21:48:04 UTC (rev 173) +++ ccm-core/trunk/src/com/arsdigita/kernel/security/Initializer.java 2005-01-13 13:06:15 UTC (rev 174) @@ -54,8 +54,6 @@ /** Obsolete parameter name for session tracking method. **/ public static String SESSION_TRACKING_PARAM = "sessionTrackingMethod"; - /** Parameter name for login configuration. **/ - public static String LOGIN_CONFIG_PARAM = "loginConfig"; /** Parameter name for security helper class name. **/ public static String SECURITY_HELPER_PARAM = "securityHelperClass"; /** Parameter name for excluded URI extensions. **/ @@ -85,10 +83,6 @@ "This parameter is obsolete.", String.class); m_conf.initParameter - (LOGIN_CONFIG_PARAM, - "The login configuration.", - List.class); - m_conf.initParameter (EXCLUDED_EXTENSIONS_PARAM, "List of extensions excluded from authentication cookies. " +"Authentication is checked for all requests, but requests " @@ -385,16 +379,10 @@ private javax.security.auth.login.Configuration getLoginConfig() throws InitializationException { - List list = (List)m_conf.getParameter(LOGIN_CONFIG_PARAM); - if (list == null) { - throw new InitializationException - (LOGIN_CONFIG_PARAM+" not defined " - // TODO: remove the following comment eventually - +"(update enterprise.init to get the default login config; " - +"loginConfig replaces loginConfigFileName and eliminates " - +"the need to use a separate file for this information)"); - } - return new LoginConfig(list); + SecurityConfig conf = Kernel.getSecurityConfig(); + List requestLoginConfig = Arrays.asList(conf.getRequestLoginConfig()); + List registerLoginConfig = Arrays.asList(conf.getRegisterLoginConfig()); + return new LoginConfig(requestLoginConfig, registerLoginConfig); } 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-12 21:48:04 UTC (rev 173) +++ ccm-core/trunk/src/com/arsdigita/kernel/security/LoginConfig.java 2005-01-13 13:06:15 UTC (rev 174) @@ -19,6 +19,8 @@ package com.arsdigita.kernel.security; import com.arsdigita.initializer.InitializationException; +import com.arsdigita.util.StringUtils; +import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -40,22 +42,16 @@ private Map m_appConfigs = new HashMap(); /** - * <p>Creates a new login configuration from the given list - * (<code>loginConfig</code>). Grammar: </p> + * <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: * - * <dl> - * <dt><i>loginConfig</i></dt> - * <dd>{ appName1, moduleList1 [, ... , appNameN, moduleListN ] }</dd> + * <pre> + * moduleName:controlFlag[:option1[:option2[:...]]] + * </pre> * - * <dt><i>appName</i></dt> - * <dd>String</dd> - * - * <dt><i>moduleList</i></dt> - * <dd>{ moduleConf1 [, ..., moduleConfN ] }</dd> - * - * <dt><i>moduleConf</i></dt> - * <dd>{ moduleName, controlFlag [, option1, ..., optionN ] }</dd> - * + * <dl> * <dt><i>moduleName</i></dt> * <dd>String</dd> * @@ -71,38 +67,31 @@ * * <p>Example:</p> * + * <p>Request context:</p> * <pre> - * loginConfig = { - * "Request", { - * {"com.arsdigita.kernel.security.CredentialLoginModule", "requisite", - * "debug=true"} - * }, - * "Register", { - * {"com.arsdigita.kernel.security.LocalLoginModule", "requisite"}, - * {"com.arsdigita.kernel.security.UserIDLoginModule", "requisite"}, - * {"com.arsdigita.kernel.security.CredentialLoginModule", "optional"} - * } - * }; + * com.arsdigita.kernel.security.CredentialLoginModule:requisite:debug=true * </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 list) throws InitializationException { - Iterator iter = list.iterator(); - while (iter.hasNext()) { - String name = getString(iter, "application name"); - List entries = getList(iter, "module configs"); - addAppConfig(name, entries); - } + public LoginConfig(List requestConfig, List registerConfig) throws InitializationException { + addAppConfig(UserContext.REQUEST_LOGIN_CONTEXT, requestConfig); + addAppConfig(UserContext.REGISTER_LOGIN_CONTEXT, registerConfig); } private void addAppConfig(String name, List entries) throws InitializationException { AppConfigurationEntry[] array = new AppConfigurationEntry[entries.size()]; - Iterator iter = entries.iterator(); for (int i = 0; i < array.length; i++) { - List entry = getList(iter, "{module, flag, options...}"); + List entry = Arrays.asList( StringUtils.split( (String) entries.get(i), ':')); array[i] = loadAppConfigEntry(entry); } m_appConfigs.put(name, array); @@ -166,17 +155,6 @@ return (String)temp; } - private List getList(Iterator iter, String name) - throws InitializationException { - Object temp = getObject(iter, name); - if (!(temp instanceof List)) { - throw new InitializationException - ("Expected List "+name - +", but got: \""+temp+"\""); - } - return (List)temp; - } - private Object getObject(Iterator iter, String name) throws InitializationException { if (!iter.hasNext()) { Modified: ccm-core/trunk/src/com/arsdigita/kernel/security/SecurityConfig.java =================================================================== --- ccm-core/trunk/src/com/arsdigita/kernel/security/SecurityConfig.java 2005-01-12 21:48:04 UTC (rev 173) +++ ccm-core/trunk/src/com/arsdigita/kernel/security/SecurityConfig.java 2005-01-13 13:06:15 UTC (rev 174) @@ -21,6 +21,7 @@ import com.arsdigita.runtime.AbstractConfig; import com.arsdigita.util.parameter.Parameter; import com.arsdigita.util.parameter.StringParameter; +import com.arsdigita.util.parameter.StringArrayParameter; import java.io.File; /** @@ -58,6 +59,20 @@ ("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_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() { @@ -73,6 +88,8 @@ register(m_loginRedirectPage); register(m_permissionPage); register(m_permSinglePage); + register(m_requestLoginConfig); + register(m_registerLoginConfig); loadInfo(); } @@ -112,5 +129,11 @@ String getPermSinglePage() { return (String) get(m_permSinglePage); } + String[] getRequestLoginConfig() { + return (String[]) get(m_requestLoginConfig); + } + String[] getRegisterLoginConfig() { + return (String[]) get(m_registerLoginConfig); + } } |