/* * Copyright (C) 2007 - 2011 GeoSolutions S.A.S. * http://www.geo-solutions.it * * GPLv3 + Classpath exception * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package it.geosolutions.geostore.services.rest; import it.geosolutions.geostore.services.UserService; import java.io.File; import java.io.InputStream; import javax.servlet.http.HttpServletRequest; import junit.framework.TestCase; import org.apache.commons.io.FileDeleteStrategy; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.cxf.common.util.Base64Utility; import org.apache.cxf.io.CachedOutputStream; import org.apache.log4j.Logger; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; /** * * Test for AuthenticationManagers. * * @author afabiani (alessio.fabiani at geo-solutions.it) */ public abstract class BaseAuthenticationTest extends TestCase { protected final Logger LOGGER = Logger.getLogger(getClass()); protected UserService userService; protected static ClassPathXmlApplicationContext context = null; @Override protected void setUp() throws Exception { super.setUp(); File securityTempFolder = new File(System.getProperty("java.io.tmpdir"), "apacheds-spring-security"); int i = 0; for (i = 0; i < 10; i++) { try { if (securityTempFolder.exists() && securityTempFolder.isDirectory() && securityTempFolder.canWrite()) { FileDeleteStrategy.FORCE.delete(securityTempFolder); FileUtils.forceDelete(securityTempFolder); } } catch (Exception e) { LOGGER.info(i * 10 + "... "); Thread.sleep(1000); continue; } break; } LOGGER.info(100); String[] paths = { "classpath*:applicationContext-test.xml" }; context = new ClassPathXmlApplicationContext(paths); LOGGER.info("Built test context: " + context); } @Override protected void tearDown() throws Exception { super.tearDown(); } protected void doAutoLogin(String username, String password, HttpServletRequest request) { try { // Must be called from request filtered by Spring Security, otherwise SecurityContextHolder is not updated UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken( username, password); // token.setDetails(new WebAuthenticationDetails(request)); Authentication authentication = ((AuthenticationProvider) context .getBean("geostoreLdapProvider")).authenticate(token); LOGGER.info("Logging in with [{" + authentication.getPrincipal() + "}]"); SecurityContextHolder.getContext().setAuthentication(authentication); } catch (Exception e) { SecurityContextHolder.getContext().setAuthentication(null); LOGGER.error("Failure in autoLogin", e); } } protected String getStringFromInputStream(InputStream in) throws Exception { CachedOutputStream bos = new CachedOutputStream(); IOUtils.copy(in, bos); in.close(); bos.close(); // System.out.println(bos.getOut().toString()); return bos.getOut().toString(); } protected String base64Encode(String value) { return Base64Utility.encode(value.getBytes()); } }