|
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);
+ }
}
|