com.enonic.cms.itest.client.InternalClientImpl_changeUserPasswordTest.java Source code

Java tutorial

Introduction

Here is the source code for com.enonic.cms.itest.client.InternalClientImpl_changeUserPasswordTest.java

Source

/*
 * 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);
    }
}