package fr.openwide.core.test; import org.junit.After; import org.junit.Before; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.ProviderManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextImpl; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.test.context.ContextConfiguration; import fr.openwide.core.jpa.exception.SecurityServiceException; import fr.openwide.core.jpa.exception.ServiceException; import fr.openwide.core.jpa.junit.AbstractTestCase; import fr.openwide.core.jpa.security.business.authority.model.Authority; import fr.openwide.core.jpa.security.business.authority.service.IAuthorityService; import fr.openwide.core.jpa.security.business.authority.util.CoreAuthorityConstants; import fr.openwide.core.jpa.security.business.person.model.IUser; import fr.openwide.core.jpa.security.service.IAuthenticationService; import fr.openwide.core.jpa.security.service.ISecurityService; import fr.openwide.core.test.jpa.security.business.person.model.MockUser; import fr.openwide.core.test.jpa.security.business.person.model.MockUserGroup; import fr.openwide.core.test.jpa.security.business.person.service.IMockUserGroupService; import fr.openwide.core.test.jpa.security.business.person.service.IMockUserService; import fr.openwide.core.test.jpa.security.config.spring.JpaSecurityTestConfig; @ContextConfiguration(classes = JpaSecurityTestConfig.class) public abstract class AbstractJpaSecurityTestCase extends AbstractTestCase { public static final String DEFAULT_PASSWORD = "test"; public static final String ROLE_GROUP_1 = "ROLE_GROUP_1"; public static final String ROLE_GROUP_2 = "ROLE_GROUP_2"; public static final String ROLE_GROUP_3 = "ROLE_GROUP_3"; @Autowired protected IMockUserService mockUserService; @Autowired protected IMockUserGroupService mockUserGroupService; @Autowired protected IAuthorityService authorityService; @Autowired protected IAuthenticationService authenticationService; @Autowired protected ISecurityService securityService; @Autowired protected ProviderManager authenticationManager; @Autowired protected PasswordEncoder passwordEncoder; @Before @Override public void init() throws ServiceException, SecurityServiceException { super.init(); createAuthority(CoreAuthorityConstants.ROLE_SYSTEM); createAuthority(CoreAuthorityConstants.ROLE_ADMIN); createAuthority(CoreAuthorityConstants.ROLE_AUTHENTICATED); createAuthority(CoreAuthorityConstants.ROLE_ANONYMOUS); createAuthority(ROLE_GROUP_1); createAuthority(ROLE_GROUP_2); createAuthority(ROLE_GROUP_3); } @After @Override public void close() throws ServiceException, SecurityServiceException { super.close(); } @Override protected void cleanAll() throws ServiceException, SecurityServiceException { cleanEntities(mockUserService); cleanEntities(mockUserGroupService); cleanEntities(authorityService); } protected MockUser createMockPerson(String userName, String firstName, String lastName) throws ServiceException, SecurityServiceException { return createMockPerson(userName, firstName, lastName, "test@example.com"); } protected MockUser createMockPerson(String userName, String firstName, String lastName, String email) throws ServiceException, SecurityServiceException { MockUser person = new MockUser(); person.setUserName(userName); person.setFirstName(firstName); person.setLastName(lastName); person.setEmail(email); person.addAuthority(authorityService.getByName(CoreAuthorityConstants.ROLE_AUTHENTICATED)); mockUserService.create(person); mockUserService.setPasswords(person, DEFAULT_PASSWORD); return person; } protected MockUserGroup createMockPersonGroup(String name) throws ServiceException, SecurityServiceException { MockUserGroup personGroup = new MockUserGroup(); personGroup.setName(name); mockUserGroupService.create(personGroup); return personGroup; } protected Authority createAuthority(String name) throws ServiceException, SecurityServiceException { Authority authority = new Authority(); authority.setName(name); authorityService.create(authority); return authority; } protected void authenticateAs(IUser person) { authenticateAs(new UsernamePasswordAuthenticationToken(person.getUserName(), DEFAULT_PASSWORD)); } protected void authenticateAs(UsernamePasswordAuthenticationToken authenticationToken) { Authentication authentication = authenticationManager.authenticate(authenticationToken); SecurityContext secureContext = new SecurityContextImpl(); secureContext.setAuthentication(authentication); SecurityContextHolder.setContext(secureContext); } }