Package com.jeecms.core.manager.impl

Source Code of com.jeecms.core.manager.impl.UnifiedUserMngImpl

package com.jeecms.core.manager.impl;

import java.io.UnsupportedEncodingException;
import java.sql.Timestamp;
import java.util.Date;
import java.util.List;
import java.util.UUID;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.jeecms.common.email.EmailSendTool;
import com.jeecms.common.email.EmailSender;
import com.jeecms.common.email.MessageTemplate;
import com.jeecms.common.page.Pagination;
import com.jeecms.common.security.BadCredentialsException;
import com.jeecms.common.security.UsernameNotFoundException;
import com.jeecms.common.security.encoder.PwdEncoder;
import com.jeecms.core.dao.UnifiedUserDao;
import com.jeecms.core.entity.UnifiedUser;
import com.jeecms.core.entity.Config.ConfigLogin;
import com.jeecms.core.manager.ConfigMng;
import com.jeecms.core.manager.UnifiedUserMng;

@Service
@Transactional
public class UnifiedUserMngImpl implements UnifiedUserMng {
  public UnifiedUser passwordForgotten(Integer userId, EmailSender email,
      MessageTemplate tpl) {
    UnifiedUser user = findById(userId);
    String uuid = StringUtils.remove(UUID.randomUUID().toString(), '-');
    user.setResetKey(uuid);
    String resetPwd = RandomStringUtils.randomNumeric(10);
    user.setResetPwd(resetPwd);
    senderEmail(user.getId(), user.getUsername(), user.getEmail(), user
        .getResetKey(), user.getResetPwd(), email, tpl);
    return user;
  }

  private void senderEmail(final Integer uid, final String username,
      final String to, final String resetKey, final String resetPwd,
      final EmailSender email, final MessageTemplate tpl) {
    JavaMailSenderImpl sender = new JavaMailSenderImpl();
    sender.setHost(email.getHost());
    sender.setUsername(email.getUsername());
    sender.setPassword(email.getPassword());
    sender.send(new MimeMessagePreparator() {
      public void prepare(MimeMessage mimeMessage)
          throws MessagingException, UnsupportedEncodingException {
        MimeMessageHelper msg = new MimeMessageHelper(mimeMessage,
            false, email.getEncoding());
        msg.setSubject(tpl.getForgotPasswordSubject());
        msg.setTo(to);
        msg.setFrom(email.getUsername(), email.getPersonal());
        String text = tpl.getForgotPasswordText();
        text = StringUtils.replace(text, "${uid}", String.valueOf(uid));
        text = StringUtils.replace(text, "${username}", username);
        text = StringUtils.replace(text, "${resetKey}", resetKey);
        text = StringUtils.replace(text, "${resetPwd}", resetPwd);
        msg.setText(text);
      }
    });
  }

  private void senderEmail(final String username, final String to,
      final String activationCode, final EmailSender email,
      final MessageTemplate tpl) throws UnsupportedEncodingException, MessagingException {
    /*
     * JavaMailSenderImpl sender = new JavaMailSenderImpl();
     * sender.setHost(email.getHost());
     * sender.setUsername(email.getUsername());
     * sender.setPassword(email.getPassword()); sender.send(new
     * MimeMessagePreparator() { public void prepare(MimeMessage
     * mimeMessage) throws MessagingException, UnsupportedEncodingException
     * { MimeMessageHelper msg; msg = new MimeMessageHelper(mimeMessage,
     * false, email.getEncoding());
     * msg.setSubject(tpl.getRegisterSubject()); msg.setTo(to);
     * msg.setFrom(email.getUsername(), email.getPersonal()); String text =
     * tpl.getRegisterText(); text = StringUtils.replace(text,
     * "${username}", username); text = StringUtils.replace(text,
     * "${activationCode}", activationCode); msg.setText(text); } });
     */
    String text = tpl.getRegisterText();
    text = StringUtils.replace(text, "${username}", username);
    text = StringUtils.replace(text, "${activationCode}", activationCode);
    EmailSendTool sendEmail = new EmailSendTool(email.getHost(), email
        .getUsername(), email.getPassword(), to, tpl
        .getRegisterSubject(), text, email.getPersonal(), "", "");
    sendEmail.send();
  }

  public UnifiedUser resetPassword(Integer userId) {
    UnifiedUser user = findById(userId);
    user.setPassword(pwdEncoder.encodePassword(user.getResetPwd()));
    user.setResetKey(null);
    user.setResetPwd(null);
    return user;
  }

  public Integer errorRemaining(String username) {
    if (StringUtils.isBlank(username)) {
      return null;
    }
    UnifiedUser user = getByUsername(username);
    if (user == null) {
      return null;
    }
    long now = System.currentTimeMillis();
    ConfigLogin configLogin = configMng.getConfigLogin();
    int maxErrorTimes = configLogin.getErrorTimes();
    int maxErrorInterval = configLogin.getErrorInterval() * 60 * 1000;
    Integer errorCount = user.getErrorCount();
    Date errorTime = user.getErrorTime();
    if (errorCount <= 0 || errorTime == null
        || errorTime.getTime() + maxErrorInterval < now) {
      return maxErrorTimes;
    }
    return maxErrorTimes - errorCount;
  }

  public UnifiedUser login(String username, String password, String ip)
      throws UsernameNotFoundException, BadCredentialsException {
    UnifiedUser user = getByUsername(username);
    if (user == null) {
      throw new UsernameNotFoundException("username not found: "
          + username);
    }
    System.out.println("com.jeecms.core.manager.impl.UnifiedUserMngImpl.login 这里我把密码取消了");
    /*
    if (!pwdEncoder.isPasswordValid(user.getPassword(), password)) {
      updateLoginError(user.getId(), ip);
      throw new BadCredentialsException("password invalid");
    }
    if (!user.getActivation()) {
      throw new BadCredentialsException("account not activated");
    }
    */
    updateLoginSuccess(user.getId(), ip);
    return user;
  }

  public void updateLoginSuccess(Integer userId, String ip) {
    UnifiedUser user = findById(userId);
    Date now = new Timestamp(System.currentTimeMillis());

    user.setLoginCount(user.getLoginCount() + 1);
    user.setLastLoginIp(ip);
    user.setLastLoginTime(now);

    user.setErrorCount(0);
    user.setErrorTime(null);
    user.setErrorIp(null);
  }

  public void updateLoginError(Integer userId, String ip) {
    UnifiedUser user = findById(userId);
    Date now = new Timestamp(System.currentTimeMillis());
    ConfigLogin configLogin = configMng.getConfigLogin();
    int errorInterval = configLogin.getErrorInterval();
    Date errorTime = user.getErrorTime();

    user.setErrorIp(ip);
    if (errorTime == null
        || errorTime.getTime() + errorInterval * 60 * 1000 < now
            .getTime()) {
      user.setErrorTime(now);
      user.setErrorCount(1);
    } else {
      user.setErrorCount(user.getErrorCount() + 1);
    }
  }

  public boolean usernameExist(String username) {
    return getByUsername(username) != null;
  }

  public boolean emailExist(String email) {
    return dao.countByEmail(email) > 0;
  }

  public UnifiedUser getByUsername(String username) {
    return dao.getByUsername(username);
  }

  public List<UnifiedUser> getByEmail(String email) {
    return dao.getByEmail(email);
  }

  @Transactional(readOnly = true)
  public Pagination getPage(int pageNo, int pageSize) {
    Pagination page = dao.getPage(pageNo, pageSize);
    return page;
  }

  @Transactional(readOnly = true)
  public UnifiedUser findById(Integer id) {
    UnifiedUser entity = dao.findById(id);
    return entity;
  }

  public UnifiedUser save(String username, String email, String password,
      String ip)  {
    Date now = new Timestamp(System.currentTimeMillis());
    UnifiedUser user = new UnifiedUser();
    user.setUsername(username);
    user.setEmail(email);
    user.setPassword(pwdEncoder.encodePassword(password));
    user.setRegisterIp(ip);
    user.setRegisterTime(now);
    user.setLastLoginIp(ip);
    user.setLastLoginTime(now);
    //不强制验证邮箱直接激活
    user.setActivation(true);
    user.init();
    dao.save(user);
    return user;
  }

  public UnifiedUser save(String username, String email, String password,
      String ip, Boolean activation, EmailSender sender,
      MessageTemplate msgTpl) throws UnsupportedEncodingException, MessagingException {
    Date now = new Timestamp(System.currentTimeMillis());
    UnifiedUser user = new UnifiedUser();
    user.setUsername(username);
    user.setEmail(email);
    user.setPassword(pwdEncoder.encodePassword(password));
    user.setRegisterIp(ip);
    user.setRegisterTime(now);
    user.setLastLoginIp(ip);
    user.setLastLoginTime(now);
    user.setActivation(activation);
    user.init();
    dao.save(user);
    if (!activation) {
      String uuid = StringUtils.remove(UUID.randomUUID().toString(), '-');
      user.setActivationCode(uuid);
      senderEmail(username, email, uuid, sender, msgTpl);
    }
    return user;
  }

  /**
   * @see UnifiedUserMng#update(Integer, String, String)
   */
  public UnifiedUser update(Integer id, String password, String email) {
    UnifiedUser user = findById(id);
    if (!StringUtils.isBlank(email)) {
      user.setEmail(email);
    } else {
      user.setEmail(null);
    }
    if (!StringUtils.isBlank(password)) {
      user.setPassword(pwdEncoder.encodePassword(password));
    }
    return user;
  }

  public boolean isPasswordValid(Integer id, String password) {
    UnifiedUser user = findById(id);
    return pwdEncoder.isPasswordValid(user.getPassword(), password);
  }

  public UnifiedUser deleteById(Integer id) {
    UnifiedUser bean = dao.deleteById(id);
    return bean;
  }

  public UnifiedUser[] deleteByIds(Integer[] ids) {
    UnifiedUser[] beans = new UnifiedUser[ids.length];
    for (int i = 0, len = ids.length; i < len; i++) {
      beans[i] = deleteById(ids[i]);
    }
    return beans;
  }

  public UnifiedUser active(String username, String activationCode) {
    UnifiedUser bean = getByUsername(username);
    bean.setActivation(true);
    bean.setActivationCode(null);
    return bean;
  }

  public UnifiedUser activeLogin(UnifiedUser user, String ip) {
    updateLoginSuccess(user.getId(), ip);
    return user;
  }

  private ConfigMng configMng;
  private PwdEncoder pwdEncoder;
  private UnifiedUserDao dao;

  @Autowired
  public void setConfigMng(ConfigMng configMng) {
    this.configMng = configMng;
  }

  @Autowired
  public void setPwdEncoder(PwdEncoder pwdEncoder) {
    this.pwdEncoder = pwdEncoder;
  }

  @Autowired
  public void setDao(UnifiedUserDao dao) {
    this.dao = dao;
  }

}
TOP

Related Classes of com.jeecms.core.manager.impl.UnifiedUserMngImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.