Package com.jeecms.cms.action.member

Source Code of com.jeecms.cms.action.member.RegisterAct

package com.jeecms.cms.action.member;

import static com.jeecms.cms.Constants.TPLDIR_MEMBER;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

import javax.mail.MessagingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailException;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.jeecms.cms.entity.main.CmsConfig;
import com.jeecms.cms.entity.main.CmsSite;
import com.jeecms.cms.entity.main.CmsUserExt;
import com.jeecms.cms.entity.main.MemberConfig;
import com.jeecms.cms.manager.main.CmsUserMng;
import com.jeecms.cms.web.CmsUtils;
import com.jeecms.cms.web.FrontUtils;
import com.jeecms.cms.web.WebErrors;
import com.jeecms.common.email.EmailSender;
import com.jeecms.common.email.MessageTemplate;
import com.jeecms.common.web.RequestUtils;
import com.jeecms.common.web.ResponseUtils;
import com.jeecms.common.web.session.SessionProvider;
import com.jeecms.core.entity.UnifiedUser;
import com.jeecms.core.manager.AuthenticationMng;
import com.jeecms.core.manager.ConfigMng;
import com.jeecms.core.manager.UnifiedUserMng;
import com.octo.captcha.service.CaptchaServiceException;
import com.octo.captcha.service.image.ImageCaptchaService;

/**
* 前台会员注册Action
*
* @author liufang
*
*/
@Controller
public class RegisterAct {
  private static final Logger log = LoggerFactory
      .getLogger(RegisterAct.class);

  public static final String REGISTER = "tpl.register";
  public static final String REGISTER_RESULT = "tpl.registerResult";
  public static final String REGISTER_ACTIVE_SUCCESS = "tpl.registerActiveSuccess";
  public static final String LOGIN_INPUT = "tpl.loginInput";

  @RequestMapping(value = "/register.jspx", method = RequestMethod.GET)
  public String input(HttpServletRequest request,
      HttpServletResponse response, ModelMap model) {
    CmsSite site = CmsUtils.getSite(request);
    MemberConfig mcfg = site.getConfig().getMemberConfig();
    // 没有开启会员功能
    if (!mcfg.isMemberOn()) {
      return FrontUtils.showMessage(request, model, "member.memberClose");
    }
    // 没有开启会员注册
    if (!mcfg.isRegisterOn()) {
      return FrontUtils.showMessage(request, model,
          "member.registerClose");
    }
    FrontUtils.frontData(request, model, site);
    model.addAttribute("mcfg", mcfg);
    return FrontUtils.getTplPath(request, site.getSolutionPath(),
        TPLDIR_MEMBER, REGISTER);
  }

  @RequestMapping(value = "/register.jspx", method = RequestMethod.POST)
  public String submit(String username, String email, String password,
      CmsUserExt userExt, String captcha, String nextUrl,
      HttpServletRequest request, HttpServletResponse response,
      ModelMap model) throws IOException {
    CmsSite site = CmsUtils.getSite(request);
    CmsConfig config=site.getConfig();
    WebErrors errors = validateSubmit(username, email, password, captcha,
        site, request, response);
    if (errors.hasErrors()) {
      return FrontUtils.showError(request, response, model, errors);
    }
    String ip = RequestUtils.getIpAddr(request);
    if(config.getEmailValidate()){
      EmailSender sender = configMng.getEmailSender();
      MessageTemplate msgTpl = configMng.getRegisterMessageTemplate();
      if (sender == null) {
        // 邮件服务器没有设置好
        model.addAttribute("status", 4);
      } else if (msgTpl == null) {
        // 邮件模板没有设置好
        model.addAttribute("status", 5);
      } else {
        try {
          cmsUserMng.registerMember(username, email, password, ip, null, userExt,
              false, sender, msgTpl);
          model.addAttribute("status", 0);
        } catch (UnsupportedEncodingException e) {
          // 发送邮件异常
          model.addAttribute("status", 100);
          model.addAttribute("message", e.getMessage());
          log.error("send email exception.", e);
        }catch (MessagingException e) {
          // 发送邮件异常
          model.addAttribute("status", 101);
          model.addAttribute("message", e.getMessage());
          log.error("send email exception.", e);
        }
      }
      log.info("member register success. username={}", username);
      FrontUtils.frontData(request, model, site);
      if (!StringUtils.isBlank(nextUrl)) {
        response.sendRedirect(nextUrl);
        return null;
      } else {
        return FrontUtils.getTplPath(request, site.getSolutionPath(),
            TPLDIR_MEMBER, REGISTER_RESULT);
      }
    }else{
      cmsUserMng.registerMember(username, email, password, ip, null, userExt);
      log.info("member register success. username={}", username);
      FrontUtils.frontData(request, model, site);
      FrontUtils.frontPageData(request, model);
      model.addAttribute("success",true);
      return FrontUtils.getTplPath(request, site.getSolutionPath(),
          TPLDIR_MEMBER, LOGIN_INPUT);
    }
   
  }

  @RequestMapping(value = "/active.jspx", method = RequestMethod.GET)
  public String active(String username, String key,HttpServletRequest request,
      HttpServletResponse response,ModelMap model) throws IOException {
    CmsSite site = CmsUtils.getSite(request);
    WebErrors errors = validateActive(username, key, request, response);
    if (errors.hasErrors()) {
      return FrontUtils.showError(request, response, model, errors);
    }
    UnifiedUser user = unifiedUserMng.active(username, key);
    String ip = RequestUtils.getIpAddr(request);
    authMng.activeLogin(user, ip, request, response, session);
    FrontUtils.frontData(request, model, site);
    return FrontUtils.getTplPath(request, site.getSolutionPath(),
        TPLDIR_MEMBER, REGISTER_ACTIVE_SUCCESS);
  }

  @RequestMapping(value = "/username_unique.jspx")
  public void usernameUnique(HttpServletRequest request,
      HttpServletResponse response) {
    String username = RequestUtils.getQueryParam(request, "username");
    // 用户名为空,返回false。
    if (StringUtils.isBlank(username)) {
      ResponseUtils.renderJson(response, "false");
      return;
    }
    CmsSite site = CmsUtils.getSite(request);
    CmsConfig config = site.getConfig();
    // 保留字检查不通过,返回false。
    if (!config.getMemberConfig().checkUsernameReserved(username)) {
      ResponseUtils.renderJson(response, "false");
      return;
    }
    // 用户名存在,返回false。
    if (unifiedUserMng.usernameExist(username)) {
      ResponseUtils.renderJson(response, "false");
      return;
    }
    ResponseUtils.renderJson(response, "true");
  }

  @RequestMapping(value = "/email_unique.jspx")
  public void emailUnique(HttpServletRequest request,
      HttpServletResponse response) {
    String email = RequestUtils.getQueryParam(request, "email");
    // email为空,返回false。
    if (StringUtils.isBlank(email)) {
      ResponseUtils.renderJson(response, "false");
      return;
    }
    // email存在,返回false。
    if (unifiedUserMng.emailExist(email)) {
      ResponseUtils.renderJson(response, "false");
      return;
    }
    ResponseUtils.renderJson(response, "true");
  }

  private WebErrors validateSubmit(String username, String email,
      String password, String captcha, CmsSite site,
      HttpServletRequest request, HttpServletResponse response) {
    MemberConfig mcfg = site.getConfig().getMemberConfig();
    WebErrors errors = WebErrors.create(request);
    try {
      if (!imageCaptchaService.validateResponseForID(session
          .getSessionId(request, response), captcha)) {
        errors.addErrorCode("error.invalidCaptcha");
        return errors;
      }
    } catch (CaptchaServiceException e) {
      errors.addErrorCode("error.exceptionCaptcha");
      log.warn("", e);
      return errors;
    }
    if (errors.ifOutOfLength(username, "username",
        mcfg.getUsernameMinLen(), 100)) {
      return errors;
    }
    if (errors.ifNotUsername(username, "username",
        mcfg.getUsernameMinLen(), 100)) {
      return errors;
    }
    if (errors.ifOutOfLength(password, "password",
        mcfg.getPasswordMinLen(), 100)) {
      return errors;
    }
    if (errors.ifMaxLength(email, "email", 100)) {
      return errors;
    }
    // 保留字检查不通过,返回false。
    if (!mcfg.checkUsernameReserved(username)) {
      errors.addErrorCode("error.usernameReserved");
      return errors;
    }
    // 用户名存在,返回false。
    if (unifiedUserMng.usernameExist(username)) {
      errors.addErrorCode("error.usernameExist");
      return errors;
    }
    return errors;
  }

  private WebErrors validateActive(String username, String activationCode,
      HttpServletRequest request, HttpServletResponse response) {
    WebErrors errors = WebErrors.create(request);
    if (StringUtils.isBlank(username)
        || StringUtils.isBlank(activationCode)) {
      errors.addErrorCode("error.exceptionParams");
      return errors;
    }
    UnifiedUser user = unifiedUserMng.getByUsername(username);
    if (user == null) {
      errors.addErrorCode("error.usernameNotExist");
      return errors;
    }
    if (user.getActivation()
        || StringUtils.isBlank(user.getActivationCode())) {
      errors.addErrorCode("error.usernameActivated");
      return errors;
    }
    if (!user.getActivationCode().equals(activationCode)) {
      errors.addErrorCode("error.exceptionActivationCode");
      return errors;
    }
    return errors;
  }

  @Autowired
  private UnifiedUserMng unifiedUserMng;
  @Autowired
  private CmsUserMng cmsUserMng;
  @Autowired
  private SessionProvider session;
  @Autowired
  private ImageCaptchaService imageCaptchaService;
  @Autowired
  private ConfigMng configMng;
  @Autowired
  private AuthenticationMng authMng;
}
TOP

Related Classes of com.jeecms.cms.action.member.RegisterAct

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.