package org.xmx0632.deliciousfruit.api.v1; import javax.validation.Valid; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.xmx0632.deliciousfruit.api.v1.bo.ForgetPwdRequest; import org.xmx0632.deliciousfruit.api.v1.bo.ForgetPwdResponse; import org.xmx0632.deliciousfruit.api.v1.bo.Result; import org.xmx0632.deliciousfruit.entity.UserAccount; import org.xmx0632.deliciousfruit.service.ResetPasswordService; import org.xmx0632.deliciousfruit.service.ResetPasswordTask; import org.xmx0632.deliciousfruit.service.UserAccountService; import org.xmx0632.deliciousfruit.utilities.common.CommonUtil; /** * UserAccount的API的Controller. * * @author xmx0632 */ @Controller @RequestMapping(value = "/api/v1") public class UserAccountForgetPwdApiController { private static Logger log = LoggerFactory .getLogger(UserAccountForgetPwdApiController.class); @Autowired private UserAccountService userAccountService; @Autowired private ResetPasswordService resetPasswordService; @RequestMapping(value = "/forgetPwd", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseEntity<ForgetPwdResponse> forgetPwd( @Valid @RequestBody ForgetPwdRequest request) { // 优先使用手机短信,其次使用发送email重置链接 log.debug("request:{}", request); String loginName = request.getLoginName(); UserAccount userAccount = userAccountService.findByUsername(loginName); log.debug("userAccount:{}", userAccount); ForgetPwdResponse response = new ForgetPwdResponse(); if (userAccount == null) { log.info("reset password request failed with [username:{} ]", loginName); Result result = new Result(Result.FAIL, "unknown username"); response.setResult(result); log.debug("response:{}", response); return new ResponseEntity<ForgetPwdResponse>(response, HttpStatus.OK); } if (CommonUtil.isMobileNO(loginName)) { // 记录密码重置请求到队列中 log.debug("send reset password message to mobile:{}", loginName); resetPasswordService.addMobileTask(new ResetPasswordTask(loginName, "")); log.info("reset password request success with [username:{}]", loginName); Result result = new Result(Result.RESET_PASSWORD_BY_MOBILE_SUCCESS, "check your mobile,reset password please."); response.setResult(result); log.debug("response:{}", response); return new ResponseEntity<ForgetPwdResponse>(response, HttpStatus.OK); } // 发送email重置密码链接 String email = getEmail(loginName, userAccount); log.debug("send reset password email for [{}] to [{}]", loginName, email); resetPasswordService.addEmailTask(new ResetPasswordTask(loginName, email)); log.info("reset password request success with [username:{} email:{}]", loginName, email); Result result = new Result(Result.RESET_PASSWORD_BY_EMAIL_SUCCESS, "check your email,reset link will be send as soon as possible"); response.setResult(result); log.debug("response:{}", response); return new ResponseEntity<ForgetPwdResponse>(response, HttpStatus.OK); } private String getEmail(String loginName, UserAccount userAccount) { if (CommonUtil.isEmail(loginName)) { return loginName; } return userAccount.getEmail(); } /** * 即将下岗,由{@link #forgetPwd(ForgetPwdRequest)}替代 * * @param request * @return */ @Deprecated @RequestMapping(value = "/emailForgetPwd", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseEntity<ForgetPwdResponse> forgetPwdByEmail( @Valid @RequestBody ForgetPwdRequest request) { log.debug("request:{}", request); String loginName = request.getLoginName(); UserAccount userAccount = userAccountService.findByUsername(loginName); log.debug("userAccount:{}", userAccount); ForgetPwdResponse response = new ForgetPwdResponse(); String email = request.getEmail(); if (userAccount == null || StringUtils.isBlank(email) || !email.equalsIgnoreCase(userAccount.getEmail())) { log.info( "reset password request failed with [username:{} email:{}]", loginName, email); Result result = new Result(Result.FAIL, "username or email not match"); response.setResult(result); log.debug("response:{}", response); return new ResponseEntity<ForgetPwdResponse>(response, HttpStatus.OK); } // 记录密码重置请求到队列中 resetPasswordService.addEmailTask(new ResetPasswordTask(loginName, email)); log.info("reset password request success with [username:{} email:{}]", loginName, email); Result result = new Result(Result.SUCCESS, "check your email,reset link will be send as soon as possible"); response.setResult(result); log.debug("response:{}", response); return new ResponseEntity<ForgetPwdResponse>(response, HttpStatus.OK); } /** * 即将下岗,由{@link #forgetPwd(ForgetPwdRequest)}替代 * * @param request * @return */ @Deprecated @RequestMapping(value = "/phoneForgetPwd", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseEntity<ForgetPwdResponse> forgetPwdByMobile( @Valid @RequestBody ForgetPwdRequest request) { log.debug("request:{}", request); String loginName = request.getLoginName(); UserAccount userAccount = userAccountService.findByUsername(loginName); log.debug("userAccount:{}", userAccount); ForgetPwdResponse response = new ForgetPwdResponse(); if (userAccount == null) { log.info("reset password request failed with [username:{} ]", loginName); Result result = new Result(Result.FAIL, "unknown username"); response.setResult(result); log.debug("response:{}", response); return new ResponseEntity<ForgetPwdResponse>(response, HttpStatus.OK); } // 记录密码重置请求到队列中 resetPasswordService .addMobileTask(new ResetPasswordTask(loginName, "")); log.info("reset password request success with [username:{}]", loginName); Result result = new Result(Result.SUCCESS, "check your mobile,reset password please."); response.setResult(result); log.debug("response:{}", response); return new ResponseEntity<ForgetPwdResponse>(response, HttpStatus.OK); } }