com.dp2345.controller.mall.PasswordController.java Source code

Java tutorial

Introduction

Here is the source code for com.dp2345.controller.mall.PasswordController.java

Source

/*
 * Copyright 2013-2015 cetvision.com. All rights reserved.
 * Support: http://www.cetvision.com
 * License: http://www.cetvision.com/license
 */
package com.dp2345.controller.mall;

import java.util.Date;
import java.util.UUID;

import javax.annotation.Resource;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.dp2345.Message;
import com.dp2345.Setting;
import com.dp2345.Setting.CaptchaType;
import com.dp2345.entity.Member;
import com.dp2345.entity.SafeKey;
import com.dp2345.entity.BaseEntity.Save;
import com.dp2345.service.CaptchaService;
import com.dp2345.service.MailService;
import com.dp2345.service.MemberService;
import com.dp2345.util.SettingUtils;

/**
 * Controller - ?
 * 
 * @author CETVISION CORP
 * @version 2.0.3
 */
@Controller("shopPasswordController")
@RequestMapping("/password")
public class PasswordController extends BaseController {

    @Resource(name = "captchaServiceImpl")
    private CaptchaService captchaService;
    @Resource(name = "memberServiceImpl")
    private MemberService memberService;
    @Resource(name = "mailServiceImpl")
    private MailService mailService;

    /**
     * ?
     */
    @RequestMapping(value = "/find", method = RequestMethod.GET)
    public String find(Model model) {
        model.addAttribute("captchaId", UUID.randomUUID().toString());
        return "/shop/password/find";
    }

    /**
     * ???
     */
    @RequestMapping(value = "/find", method = RequestMethod.POST)
    public @ResponseBody Message find(String captchaId, String captcha, String username, String email) {
        if (!captchaService.isValid(CaptchaType.findPassword, captchaId, captcha)) {
            return Message.error("shop.captcha.invalid");
        }
        if (StringUtils.isEmpty(username) || StringUtils.isEmpty(email)) {
            return Message.error("shop.common.invalid");
        }
        Member member = memberService.findByUsername(username);
        if (member == null) {
            return Message.error("shop.password.memberNotExist");
        }
        if (!member.getEmail().equalsIgnoreCase(email)) {
            return Message.error("shop.password.invalidEmail");
        }
        Setting setting = SettingUtils.get();
        SafeKey safeKey = new SafeKey();
        safeKey.setValue(UUID.randomUUID().toString() + DigestUtils.md5Hex(RandomStringUtils.randomAlphabetic(30)));
        safeKey.setExpire(setting.getSafeKeyExpiryTime() != 0
                ? DateUtils.addMinutes(new Date(), setting.getSafeKeyExpiryTime())
                : null);
        member.setSafeKey(safeKey);
        memberService.update(member);
        mailService.sendFindPasswordMail(member.getEmail(), member.getUsername(), safeKey);
        return Message.success("shop.password.mailSuccess");
    }

    /**
     * ??
     */
    @RequestMapping(value = "/reset", method = RequestMethod.GET)
    public String reset(String username, String key, Model model) {
        Member member = memberService.findByUsername(username);
        if (member == null) {
            return ERROR_VIEW;
        }
        SafeKey safeKey = member.getSafeKey();
        if (safeKey == null || safeKey.getValue() == null || !safeKey.getValue().equals(key)) {
            return ERROR_VIEW;
        }
        if (safeKey.hasExpired()) {
            model.addAttribute("erroInfo", Message.warn("shop.password.hasExpired"));
            return ERROR_VIEW;
        }
        model.addAttribute("captchaId", UUID.randomUUID().toString());
        model.addAttribute("member", member);
        model.addAttribute("key", key);
        return "/shop/password/reset";
    }

    /**
     * ????
     */
    @RequestMapping(value = "reset", method = RequestMethod.POST)
    public @ResponseBody Message reset(String captchaId, String captcha, String username, String newPassword,
            String key) {
        if (!captchaService.isValid(CaptchaType.resetPassword, captchaId, captcha)) {
            return Message.error("shop.captcha.invalid");
        }
        Member member = memberService.findByUsername(username);
        if (member == null) {
            return ERROR_MESSAGE;
        }
        if (!isValid(Member.class, "password", newPassword, Save.class)) {
            return Message.warn("shop.password.invalidPassword");
        }
        Setting setting = SettingUtils.get();
        if (newPassword.length() < setting.getPasswordMinLength()
                || newPassword.length() > setting.getPasswordMaxLength()) {
            return Message.warn("shop.password.invalidPassword");
        }
        SafeKey safeKey = member.getSafeKey();
        if (safeKey == null || safeKey.getValue() == null || !safeKey.getValue().equals(key)) {
            return ERROR_MESSAGE;
        }
        if (safeKey.hasExpired()) {
            return Message.error("shop.password.hasExpired");
        }
        member.setPassword(DigestUtils.md5Hex(newPassword));
        safeKey.setExpire(new Date());
        safeKey.setValue(null);
        memberService.update(member);
        return Message.success("shop.password.resetSuccess");
    }

}