/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.itest.client; import java.io.IOException; import org.apache.commons.codec.digest.DigestUtils; import org.jdom.JDOMException; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.mock.web.MockHttpServletRequest; import com.enonic.cms.api.client.model.ChangeUserPasswordParams; import com.enonic.cms.api.plugin.ext.userstore.UserStoreConfigField; import com.enonic.cms.core.client.InternalClient; import com.enonic.cms.core.security.PortalSecurityHolder; import com.enonic.cms.core.security.user.StoreNewUserCommand; import com.enonic.cms.core.security.user.UserEntity; import com.enonic.cms.core.security.user.UserKey; import com.enonic.cms.core.security.user.UserType; import com.enonic.cms.core.security.userstore.StoreNewUserStoreCommand; import com.enonic.cms.core.security.userstore.UserStoreKey; import com.enonic.cms.core.security.userstore.UserStoreService; import com.enonic.cms.api.plugin.ext.userstore.UserStoreConfig; import com.enonic.cms.core.servlet.ServletRequestAccessor; import com.enonic.cms.api.plugin.ext.userstore.UserFieldType; import com.enonic.cms.api.plugin.ext.userstore.UserFields; import com.enonic.cms.itest.AbstractSpringTest; import com.enonic.cms.itest.util.DomainFixture; import static junit.framework.Assert.assertEquals; public class InternalClientImpl_changeUserPasswordTest extends AbstractSpringTest { @Autowired private DomainFixture fixture; @Autowired private UserStoreService userStoreService; @Autowired @Qualifier("localClient") private InternalClient internalClient; @Before public void before() throws IOException, JDOMException { fixture.initSystemData(); MockHttpServletRequest request = new MockHttpServletRequest(); request.setRemoteAddr( "127.0.0.1" ); ServletRequestAccessor.setRequest( request ); PortalSecurityHolder.setAnonUser( fixture.findUserByName( "anonymous" ).getKey() ); } @After public void after() { PortalSecurityHolder.setLoggedInUser( null ); } @Test public void change_password() { UserStoreConfig userStoreConfig = new UserStoreConfig(); userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.FIRST_NAME, "required" ) ); userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.LAST_NAME, "required" ) ); userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.INITIALS, "required" ) ); createLocalUserStore( "myLocalStore", true, userStoreConfig ); fixture.flushAndClearHibernateSession(); UserFields userFields = new UserFields(); userFields.setFirstName( "First name" ); userFields.setLastName( "Last name" ); userFields.setInitials( "INI" ); createNormalUser( "testuser", "myLocalStore", userFields ); // verify UserEntity resultUser = fixture.findUserByName( "testuser" ); assertEquals( "INI", resultUser.getUserFields().getInitials() ); assertEquals( DigestUtils.shaHex( "password" ), resultUser.getPassword() ); loginPortalUser( "testuser" ); // exercise ChangeUserPasswordParams params = new ChangeUserPasswordParams(); params.userstore = "myLocalStore"; params.username = "testuser"; params.password = "changed"; internalClient.changeUserPassword( params ); // verify resultUser = fixture.findUserByName( "testuser" ); assertEquals( DigestUtils.shaHex( "changed" ), resultUser.getPassword() ); } private UserStoreConfigField createUserStoreUserFieldConfig( UserFieldType type, String properties ) { UserStoreConfigField fieldConfig = new UserStoreConfigField( type ); fieldConfig.setRemote( properties.contains( "remote" ) ); fieldConfig.setReadOnly( properties.contains( "read-only" ) ); fieldConfig.setRequired( properties.contains( "required" ) ); fieldConfig.setIso( properties.contains( "iso" ) ); return fieldConfig; } private void loginPortalUser( String userName ) { PortalSecurityHolder.setImpersonatedUser( fixture.findUserByName( userName ).getKey() ); PortalSecurityHolder.setLoggedInUser( fixture.findUserByName( userName ).getKey() ); } private UserStoreKey createLocalUserStore( String name, boolean defaultStore, UserStoreConfig config ) { StoreNewUserStoreCommand command = new StoreNewUserStoreCommand(); command.setStorer( fixture.findUserByName( "admin" ).getKey() ); command.setName( name ); command.setDefaultStore( defaultStore ); command.setConfig( config ); return userStoreService.storeNewUserStore( command ); } private UserKey createNormalUser( String userName, String userStoreName, UserFields userFields ) { StoreNewUserCommand command = new StoreNewUserCommand(); command.setStorer( fixture.findUserByName( "admin" ).getKey() ); command.setUsername( userName ); command.setUserStoreKey( fixture.findUserStoreByName( userStoreName ).getKey() ); command.setAllowAnyUserAccess( true ); command.setEmail( userName + "@example.com" ); command.setPassword( "password" ); command.setType( UserType.NORMAL ); command.setDisplayName( userName ); command.setUserFields( userFields ); return userStoreService.storeNewUser( command ); } }