CCM NG: Added the SecurityConfig class to CCM NG
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@3524 8810af33-2d31-482b-a856-94f89814c4dfpull/2/head
parent
e01c82e6c5
commit
a046640210
|
|
@ -0,0 +1,79 @@
|
|||
/*
|
||||
* Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2.1 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
package com.arsdigita.kernel.security;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
/**
|
||||
* Default implementation of SecurityHelper interface.
|
||||
*
|
||||
* @author Sameer Ajmani
|
||||
* @see SecurityHelper
|
||||
*/
|
||||
public class DefaultSecurityHelper implements SecurityHelper {
|
||||
|
||||
/**
|
||||
* Determines whether the request is secure by calling
|
||||
* <code>req.isSecure()</code>.
|
||||
*
|
||||
* @param request The current {@link HttpServletRequest}
|
||||
*
|
||||
* @return req.isSecure().
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public boolean isSecure(final HttpServletRequest request) {
|
||||
return request.isSecure();
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines whether the current request requires that the user be logged
|
||||
* in.
|
||||
*
|
||||
* @param request The current {@link HttpServletRequest}
|
||||
*
|
||||
* @return <code>true</code> if the request is secure and the page is not on
|
||||
* a list of allowed pages (such as the login page and the
|
||||
* bad-password page), <code>false</code> otherwise.
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public boolean requiresLogin(final HttpServletRequest request) {
|
||||
// XXX workaround, old is broken anyway,
|
||||
// it doesn't take into account dispatcher prefix ( /ccm )
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the full URL of the login page stored in the page map.
|
||||
*
|
||||
* @param request The current {@link HttpServletRequest}
|
||||
*
|
||||
* @return the full URL of the login page.
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public String getLoginURL(final HttpServletRequest request) {
|
||||
//ToDo: Add correct method call here.
|
||||
|
||||
//return UI.getLoginPageURL();
|
||||
return "";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,239 @@
|
|||
/*
|
||||
* Copyright (C) 2003-2004 Red Hat Inc. All Rights Reserved.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2.1 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
package com.arsdigita.kernel.security;
|
||||
|
||||
import com.arsdigita.runtime.AbstractConfig;
|
||||
import com.arsdigita.util.parameter.BooleanParameter;
|
||||
import com.arsdigita.util.parameter.IntegerParameter;
|
||||
import com.arsdigita.util.parameter.Parameter;
|
||||
import com.arsdigita.util.parameter.SpecificClassParameter;
|
||||
import com.arsdigita.util.parameter.StringArrayParameter;
|
||||
import com.arsdigita.util.parameter.StringParameter;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* A record containing server-session scoped security configuration properties.
|
||||
*
|
||||
* Accessors of this class may return null. Developers should take care to trap
|
||||
* null return values in their code.
|
||||
*
|
||||
*
|
||||
* @author Rafael H. Schloming <rhs@mit.edu>
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
public class SecurityConfig extends AbstractConfig {
|
||||
|
||||
private static SecurityConfig s_config = null;
|
||||
|
||||
private static String s_systemAdministratorEmailAddress = null;
|
||||
|
||||
/**
|
||||
* Size of secret key in bytes. *
|
||||
*/
|
||||
@SuppressWarnings("PublicField")
|
||||
public static int SECRET_KEY_BYTES = 16;
|
||||
|
||||
/**
|
||||
* The class name of the SecurityHelper implementation. Must implement
|
||||
* SecurityHelper interface
|
||||
*/
|
||||
private final Parameter m_securityHelperClass = new SpecificClassParameter(
|
||||
"waf.security_helper_class", Parameter.REQUIRED,
|
||||
com.arsdigita.kernel.security.DefaultSecurityHelper.class,
|
||||
com.arsdigita.kernel.security.SecurityHelper.class);
|
||||
|
||||
/**
|
||||
* List of extensions excluded from authentication cookies. Authentication
|
||||
* is checked for all requests, but requests with one of these extensions
|
||||
* will never cause a new cookie to be set. Include a leading dot for each
|
||||
* extension.
|
||||
*/
|
||||
private final Parameter m_excludedExtensions = new StringArrayParameter(
|
||||
"waf.excluded_extensions", Parameter.REQUIRED,
|
||||
new String[]{".jpg", ".gif", ".png", ".pdf"});
|
||||
|
||||
private final Parameter m_cookieDurationMinutes = new IntegerParameter(
|
||||
"waf.pagemap.cookies_duration_minutes", Parameter.OPTIONAL, null);
|
||||
|
||||
private final Parameter m_cookieDomain = new StringParameter(
|
||||
"waf.cookie_domain", Parameter.OPTIONAL, null);
|
||||
|
||||
private final Parameter m_loginConfig = new StringArrayParameter(
|
||||
"waf.login_config", Parameter.REQUIRED,
|
||||
new String[]{
|
||||
"Register:com.arsdigita.kernel.security.LocalLoginModule:requisite",});
|
||||
|
||||
private final Parameter m_adminEmail = new StringParameter(
|
||||
"waf.admin.contact_email", Parameter.OPTIONAL, null);
|
||||
|
||||
private final Parameter m_autoRegistrationOn = new BooleanParameter(
|
||||
"waf.auto_registration_on", Parameter.REQUIRED, Boolean.TRUE);
|
||||
|
||||
private final Parameter m_userBanOn = new BooleanParameter(
|
||||
"waf.user_ban_on",
|
||||
Parameter.REQUIRED,
|
||||
Boolean.FALSE);
|
||||
|
||||
private final Parameter m_enableQuestion = new BooleanParameter(
|
||||
"waf.user_question.enable", Parameter.REQUIRED, Boolean.FALSE);
|
||||
|
||||
/**
|
||||
* The default hash algorithm used for new passwords. Default is SHA-512
|
||||
* which should sufficient for good security.
|
||||
*/
|
||||
private final Parameter m_hashAlgorithm = new StringParameter(
|
||||
"waf.security.hash_algorithm", Parameter.REQUIRED, "SHA-512");
|
||||
|
||||
/**
|
||||
* Default length of the salt for new passwords.
|
||||
*/
|
||||
private final Parameter m_saltLength = new IntegerParameter(
|
||||
"waf.security.salt_length", Parameter.REQUIRED, 256);
|
||||
|
||||
/**
|
||||
* Constructs an empty SecurityConfig object
|
||||
*/
|
||||
public SecurityConfig() {
|
||||
|
||||
register(m_securityHelperClass);
|
||||
register(m_excludedExtensions);
|
||||
|
||||
register(m_cookieDomain);
|
||||
register(m_loginConfig);
|
||||
register(m_cookieDurationMinutes);
|
||||
register(m_adminEmail);
|
||||
register(m_autoRegistrationOn);
|
||||
register(m_userBanOn);
|
||||
register(m_enableQuestion);
|
||||
|
||||
register(m_hashAlgorithm);
|
||||
register(m_saltLength);
|
||||
|
||||
loadInfo();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the singleton configuration record for the runtime environment.
|
||||
*
|
||||
* @return The <code>RuntimeConfig</code> record; it cannot be null
|
||||
*/
|
||||
public static final synchronized SecurityConfig getConfig() {
|
||||
if (s_config == null) {
|
||||
s_config = new SecurityConfig();
|
||||
s_config.load();
|
||||
}
|
||||
|
||||
return s_config;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public final Class getSecurityHelperClass() {
|
||||
return (Class) get(m_securityHelperClass);
|
||||
}
|
||||
|
||||
// /**
|
||||
// * Obsolete!
|
||||
// * @return
|
||||
// */
|
||||
// public final String getSessionTrackingMethod() {
|
||||
// return (String) get(m_sessionTrackingMethod);
|
||||
// }
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public final List<String> getExcludedExtensions() {
|
||||
return Arrays.asList((String[]) get(m_excludedExtensions));
|
||||
}
|
||||
|
||||
public String getCookieDomain() {
|
||||
return (String) get(m_cookieDomain);
|
||||
}
|
||||
|
||||
String[] getLoginConfig() {
|
||||
return (String[]) get(m_loginConfig);
|
||||
}
|
||||
|
||||
Integer getCookieDurationMinutes() {
|
||||
return (Integer) get(m_cookieDurationMinutes);
|
||||
}
|
||||
|
||||
boolean isUserBanOn() {
|
||||
return ((Boolean) get(m_userBanOn)).booleanValue();
|
||||
}
|
||||
|
||||
public String getAdminContactEmail() {
|
||||
String email = (String) get(m_adminEmail);
|
||||
|
||||
// Return empty string instead of looking up into the database. If no
|
||||
// email if configured for the admin we consider that as a configuration
|
||||
// issue.
|
||||
if (email == null || email.isEmpty()) {
|
||||
return "";
|
||||
} else {
|
||||
return email;
|
||||
}
|
||||
// if (email == null || email.trim().length() == 0) {
|
||||
// email = getSystemAdministratorEmailAddress();
|
||||
// }
|
||||
// return email;
|
||||
}
|
||||
|
||||
public Boolean getEnableQuestion() {
|
||||
return (Boolean) get(m_enableQuestion);
|
||||
}
|
||||
|
||||
// private static synchronized String getSystemAdministratorEmailAddress() {
|
||||
// if (s_systemAdministratorEmailAddress == null) {
|
||||
// ObjectPermissionCollection perms = PermissionService.
|
||||
// getGrantedUniversalPermissions();
|
||||
// perms.addEqualsFilter("granteeIsUser", Boolean.TRUE);
|
||||
// perms.clearOrder();
|
||||
// perms.addOrder("granteeID");
|
||||
// if (perms.next()) {
|
||||
// s_systemAdministratorEmailAddress = perms.getGranteeEmail().
|
||||
// toString();
|
||||
// perms.close();
|
||||
// } else {
|
||||
// // Haven't found anything. We don't want to repeat this query
|
||||
// // over and over again.
|
||||
// s_systemAdministratorEmailAddress = "";
|
||||
// }
|
||||
// }
|
||||
// return s_systemAdministratorEmailAddress;
|
||||
// }
|
||||
|
||||
public final boolean isAutoRegistrationOn() {
|
||||
return ((Boolean) get(m_autoRegistrationOn)).booleanValue();
|
||||
}
|
||||
|
||||
public String getHashAlgorithm() {
|
||||
return (String) get(m_hashAlgorithm);
|
||||
}
|
||||
|
||||
public Integer getSaltLength() {
|
||||
return (Integer) get(m_saltLength);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2.1 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
package com.arsdigita.kernel.security;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
/**
|
||||
* Provides methods for determining security properties for a request.
|
||||
*
|
||||
* @author Sameer Ajmani
|
||||
* @version $Id: SecurityHelper.java 287 2005-02-22 00:29:02Z sskracic $
|
||||
*/
|
||||
public interface SecurityHelper {
|
||||
|
||||
/**
|
||||
* Determines whether the given request is secure. Implementation may
|
||||
* simply return <code>req.isSecure()</code>, but certain deployments
|
||||
* may use other information (such as the requested port number)
|
||||
* instead.
|
||||
*
|
||||
* @param req the request to check
|
||||
*
|
||||
* @return <code>true</code> if the given request uses a secure
|
||||
* protocol, <code>false</code> otherwise.
|
||||
**/
|
||||
public boolean isSecure(HttpServletRequest req);
|
||||
|
||||
/**
|
||||
* Determines whether the given request requires the user to be logged
|
||||
* in. If this method returns <code>true</code>, the system will call
|
||||
* <code>getLoginURL</code> to determine where to redirect the client to
|
||||
* log in.
|
||||
*
|
||||
* @param req the request to check
|
||||
*
|
||||
* @return <code>true</code> if the given request requires the user to
|
||||
* be logged in, <code>false</code> otherwise.
|
||||
**/
|
||||
public boolean requiresLogin(HttpServletRequest req);
|
||||
|
||||
/**
|
||||
* Determines where to redirect the client to log in. The system calls
|
||||
* this method if the user fails to log in and
|
||||
* <code>requiresLogin(req)</code> is true.
|
||||
*
|
||||
* @return the URL to which the client should be redirected to log in,
|
||||
* never null.
|
||||
**/
|
||||
public String getLoginURL(HttpServletRequest req);
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
waf.login_config.title=Login Configuration
|
||||
waf.login_config.purpose=Enter JAAS login configuration, using the syntax described in Javadoc for com.arsdigita.kernel.security.LoginConfig
|
||||
waf.login_config.example=Request:com.arsdigita.kernel.security.AdminLoginModule:sufficient,Register:com.arsdigita.kernel.security.LocalLoginModule:requisite
|
||||
waf.login_config.format=[string,string,...]
|
||||
|
||||
waf.cookie_domain.title=Cookie Domain
|
||||
waf.cookie_domain.purpose=Enter the domain to which the Aplaws authentication cookie is presented
|
||||
waf.cookie_domain.example=.example.com
|
||||
waf.cookie_domain.format=[string]
|
||||
|
||||
waf.admin.contact_email.title=System administrator email address
|
||||
waf.admin.contact_email.purpose=Email address that will be displayed on footer of login/admin pages, if empty then site-wide admin email will be substituted
|
||||
waf.admin.contact_email.example=ccmadmin@example.com
|
||||
waf.admin.contact_email.format=[string]
|
||||
|
||||
waf.auto_registration_on.title=Auto Registration
|
||||
waf.auto_registration_on.purpose=New users get automatically redirected to the create new user form
|
||||
waf.auto_registration_on.example=true
|
||||
waf.auto_registration_on.format=true|false
|
||||
|
||||
waf.user_ban_on.title=User Ban
|
||||
waf.user_ban_on.purpose=Check on each access if user has been banned from the site.
|
||||
waf.user_ban_on.example=false
|
||||
waf.user_ban_on.format=true|false
|
||||
|
||||
waf.user_question_enable.title=Enable question
|
||||
waf.user_question_enable.purpose=Enable question if a user has forgotten its password
|
||||
waf.user_question_enable.example=false
|
||||
waf.user_question_enable.format=true|false
|
||||
|
||||
waf.security.hash_algorithm.title=Default Hash Algorithm
|
||||
waf.security.hash_algorithm.purpose=Sets the Hash Algorithm to use for new passwords. The available algorithms depend on the Java Runtime.
|
||||
waf.security.hash_algorithm.example=SHA-512
|
||||
waf.security.hash_algorithm.format=[string]
|
||||
|
||||
waf.security.salt_length.title=Default Salt Length
|
||||
waf.security.salt_length.purpose=Sets the length of the salt for new passwords
|
||||
waf.security.salt_length.example=256
|
||||
waf.security.salt_length.format=[int]
|
||||
|
|
@ -37,7 +37,6 @@ import org.junit.Test;
|
|||
import org.junit.experimental.categories.Category;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.libreccm.tests.categories.IntegrationTest;
|
||||
import sun.util.locale.StringTokenIterator;
|
||||
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,163 @@
|
|||
/*
|
||||
* Copyright (C) 2015 LibreCCM Foundation.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301 USA
|
||||
*/
|
||||
package com.arsdigita.kernel.security;
|
||||
|
||||
import static org.hamcrest.Matchers.*;
|
||||
|
||||
import org.jboss.arquillian.container.test.api.Deployment;
|
||||
import org.jboss.arquillian.junit.Arquillian;
|
||||
import org.jboss.shrinkwrap.api.ShrinkWrap;
|
||||
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
|
||||
import org.jboss.shrinkwrap.api.spec.WebArchive;
|
||||
import org.jboss.shrinkwrap.resolver.api.maven.Maven;
|
||||
import org.jboss.shrinkwrap.resolver.api.maven.PomEquippedResolveStage;
|
||||
import org.junit.After;
|
||||
import org.junit.AfterClass;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
import org.junit.experimental.categories.Category;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.libreccm.tests.categories.IntegrationTest;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
@RunWith(Arquillian.class)
|
||||
@Category(IntegrationTest.class)
|
||||
public class SecurityConfigTest {
|
||||
|
||||
public SecurityConfigTest() {
|
||||
|
||||
}
|
||||
|
||||
@BeforeClass
|
||||
public static void setUpClass() {
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void tearDownClass() {
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() {
|
||||
}
|
||||
|
||||
@Deployment
|
||||
public static WebArchive createDeployment() {
|
||||
final PomEquippedResolveStage pom = Maven
|
||||
.resolver()
|
||||
.loadPomFromFile("pom.xml");
|
||||
final PomEquippedResolveStage dependencies = pom
|
||||
.importCompileAndRuntimeDependencies();
|
||||
final File[] libs = dependencies.resolve().withTransitivity().asFile();
|
||||
|
||||
for (File lib : libs) {
|
||||
System.err.printf("Adding file '%s' to test archive...%n",
|
||||
lib.getName());
|
||||
}
|
||||
|
||||
return ShrinkWrap
|
||||
.create(WebArchive.class,
|
||||
"LibreCCM-com.arsdigita.kernel.security.SecurityConfigTest.war")
|
||||
//.addPackage(CcmObject.class.getPackage())
|
||||
.addPackage(com.arsdigita.kernel.KernelConfig.class.getPackage())
|
||||
.addPackage(com.arsdigita.kernel.security.SecurityConfig.class
|
||||
.getPackage())
|
||||
.addPackage(com.arsdigita.runtime.AbstractConfig.class.getPackage())
|
||||
.addPackage(com.arsdigita.util.parameter.AbstractParameter.class.
|
||||
getPackage())
|
||||
.addPackage(com.arsdigita.util.JavaPropertyReader.class.
|
||||
getPackage())
|
||||
.addPackage(com.arsdigita.web.CCMApplicationContextListener.class
|
||||
.getPackage())
|
||||
.addPackage(com.arsdigita.xml.XML.class.getPackage())
|
||||
.addPackage(com.arsdigita.xml.formatters.DateFormatter.class
|
||||
.getPackage())
|
||||
.addPackage(org.libreccm.tests.categories.IntegrationTest.class
|
||||
.getPackage())
|
||||
.addAsLibraries(libs)
|
||||
.addAsResource(
|
||||
"configtests/com/arsdigita/kernel/security/SecurityConfigTest/ccm-core.config",
|
||||
"ccm-core.config")
|
||||
.addAsWebInfResource(
|
||||
"configtests/com/arsdigita/kernel/security/SecurityConfigTest/registry.properties",
|
||||
"conf/registry/registry.properties")
|
||||
.addAsWebInfResource(
|
||||
"configtests/com/arsdigita/kernel/security/SecurityConfigTest/kernel.properties",
|
||||
"conf/registry/ccm-core/kernel.properties")
|
||||
.addAsWebInfResource(
|
||||
"configtests/com/arsdigita/kernel/security/SecurityConfigTest/security.properties",
|
||||
"conf/registry/ccm-core/security.properties")
|
||||
.addAsResource(
|
||||
"com/arsdigita/kernel/KernelConfig_parameter.properties",
|
||||
"com/arsdigita/kernel/KernelConfig_parameter.properties")
|
||||
.addAsResource(
|
||||
"com/arsdigita/kernel/security/SecurityConfig_parameter.properties",
|
||||
"com/arsdigita/kernel/security/SecurityConfig_parameter.properties")
|
||||
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void verifySecurityConfig() {
|
||||
final SecurityConfig securityConfig = SecurityConfig.getConfig();
|
||||
|
||||
final String[] loginConfig = securityConfig.getLoginConfig();
|
||||
assertThat(loginConfig.length, is(1));
|
||||
assertThat(loginConfig[0], is(equalTo(
|
||||
"Register:com.arsdigita.kernel.security.LocalLoginModule:requisite")));
|
||||
|
||||
final List<String> excludedExtensions = securityConfig.getExcludedExtensions();
|
||||
assertThat(excludedExtensions.size(), is(4));
|
||||
assertThat(excludedExtensions.get(0), is(equalTo(".jpg")));
|
||||
assertThat(excludedExtensions.get(1), is(equalTo(".gif")));
|
||||
assertThat(excludedExtensions.get(2), is(equalTo(".png")));
|
||||
assertThat(excludedExtensions.get(3), is(equalTo(".pdf")));
|
||||
|
||||
assertThat(securityConfig.getCookieDurationMinutes(), is(nullValue()));
|
||||
|
||||
assertThat(securityConfig.getCookieDomain(),
|
||||
is(equalTo(".example.org")));
|
||||
|
||||
assertThat(securityConfig.getAdminContactEmail(),
|
||||
is(equalTo("admin@example.org")));
|
||||
|
||||
assertThat(securityConfig.isAutoRegistrationOn(), is(false));
|
||||
|
||||
assertThat(securityConfig.isUserBanOn(), is(true));
|
||||
|
||||
assertThat(securityConfig.getEnableQuestion(), is(false));
|
||||
|
||||
assertThat(securityConfig.getHashAlgorithm(), is(equalTo("SHA-256")));
|
||||
|
||||
assertThat(securityConfig.getSaltLength(), is(128));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<registry>
|
||||
<config class="com.arsdigita.kernel.KernelConfig"
|
||||
storage="ccm-core/kernel.properties"/>
|
||||
|
||||
<config class="com.arsdigita.kernel.security.SecurityConfig"
|
||||
storage="ccm-core/security.properties"/>
|
||||
</registry>
|
||||
|
|
@ -0,0 +1 @@
|
|||
# this file is empty by purpose.
|
||||
|
|
@ -0,0 +1 @@
|
|||
waf.config.packages=ccm-core
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
waf.login_config=Register:com.arsdigita.kernel.security.LocalLoginModule:requisite
|
||||
|
||||
waf.cookie_domain=.example.org
|
||||
|
||||
waf.admin.contact_email=admin@example.org
|
||||
|
||||
waf.auto_registration_on=false
|
||||
|
||||
waf.user_ban_on=true
|
||||
|
||||
waf.user_question_enable=false
|
||||
|
||||
waf.security.hash_algorithm=SHA-256
|
||||
|
||||
waf.security.salt_length=128
|
||||
Loading…
Reference in New Issue