All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.payneteasy.superfly.policy.account.pcidss.PCIDSSAccountPolicy Maven / Gradle / Ivy

package com.payneteasy.superfly.policy.account.pcidss;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Required;

import com.payneteasy.superfly.dao.UserDao;
import com.payneteasy.superfly.model.RoutineResult;
import com.payneteasy.superfly.model.User;
import com.payneteasy.superfly.password.PasswordGenerator;
import com.payneteasy.superfly.password.UserPasswordEncoder;
import com.payneteasy.superfly.policy.account.AccountPolicy;
import com.payneteasy.superfly.resetpassword.ResetPasswordStrategy;
import com.payneteasy.superfly.service.UserService;

/**
 * {@link AccountPolicy} which conforms to PCI-DSS requirements.
 *
 * @author Roman Puchkovskiy
 */
public class PCIDSSAccountPolicy implements AccountPolicy {

    private static final Logger logger = LoggerFactory.getLogger(PCIDSSAccountPolicy.class);

    private UserDao userDao;
    private PasswordGenerator passwordGenerator;
    private UserPasswordEncoder userPasswordEncoder;
    private ResetPasswordStrategy resetPasswordStrategy;

    @Required
    public void setResetPasswordStrategy(ResetPasswordStrategy resetPasswordStrategy) {
        this.resetPasswordStrategy = resetPasswordStrategy;
    }

    @Required
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Required
    public void setPasswordGenerator(PasswordGenerator passwordGenerator) {
        this.passwordGenerator = passwordGenerator;
    }

    @Required
    public void setUserPasswordEncoder(UserPasswordEncoder userPasswordEncoder) {
        this.userPasswordEncoder = userPasswordEncoder;
    }

    public String unlockUser(long userId, boolean unlockingSuspendedUser) {
        if (unlockingSuspendedUser) {
            String password = passwordGenerator.generate();
            String encPassword = userPasswordEncoder.encode(password, userId);
            RoutineResult result = userDao.unlockSuspendedUser(userId, encPassword);
            if (!result.isOk()) {
                throw new IllegalStateException(result.getErrorMessage());
            }
            return password;
        } else {
            RoutineResult result = userDao.unlockUser(userId);
            if (!result.isOk()) {
                throw new IllegalStateException(result.getErrorMessage());
            }
            return null;
        }
    }

    public void suspendUsersIfNeeded(int days, UserService userService) {
        List users = userDao.getUsersToSuspend(days);
        for (User user : users) {
            logger.debug(String.format("Suspending user [%s] with id=%d", user.getUserName(), user.getUserid()));
            userService.suspendUser(user.getUserid());
        }
    }

    public void expirePasswordsIfNeeded(int days, UserService userService) {
        List users=userDao.getUsersWithExpiredPasswords(days);
        for(User u:users){
            logger.debug(String.format("Lock user [%s] with id=%d",u.getUserName(),u.getUserid()));
            resetPasswordStrategy.resetPassword(u.getUserid(),u.getUserName(), null);
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy