package com.community.pocket.api.web; import com.community.pocket.entity.po.Manager; import com.community.pocket.entity.po.ManagerToken; import com.community.pocket.entity.vo.EmailTypeConfig; import com.community.pocket.entity.vo.Result; import com.community.pocket.entity.vo.web.*; import com.community.pocket.repository.EmailDao; import com.community.pocket.repository.ManagerDao; import com.community.pocket.repository.ManagerTokenDao; import com.community.pocket.util.EmailService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.DigestUtils; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import java.util.Calendar; import java.util.Date; @RestController @RequestMapping("/api/manager") //客户端跨域测试 @CrossOrigin("http://localhost:4200") //管理员接口 public class ManagerController { @Autowired private ManagerDao managerDao; //邮箱配置 @Autowired private EmailTypeConfig emailTypeConfig; //邮箱服务 @Autowired private EmailService emailService; @Autowired private ManagerTokenDao managerTokenDao; @Autowired private EmailDao emailDao; // 登陆 @PostMapping("login") public LoginResponse login(@RequestBody ManagerLogin managerLogin) { if (StringUtils.isEmpty(managerLogin.getManagerName())) { return new LoginResponse(Result.FAIL, LoginResponse.Msg.manager); } else if (StringUtils.isEmpty(managerLogin.getPassword())) { return new LoginResponse(Result.FAIL, LoginResponse.Msg.password); //校验账号密码 } else if (!managerDao.login(managerLogin)) { return new LoginResponse(Result.FAIL, LoginResponse.Msg.fail); } else { // 验证通过生成令牌响应给服务端 ManagerToken managerToken = new ManagerToken(); Calendar c = Calendar.getInstance(); c.setTime(new Date()); managerToken.setCreateTime(c.getTimeInMillis()); // 令牌有效时间1天 c.add(Calendar.DAY_OF_MONTH, 1); managerToken.setUseTime(c.getTimeInMillis()); // 生成token managerToken.setToken(DigestUtils.md5DigestAsHex((managerToken.getCreateTime() + "" + managerToken.getUseTime() + "").getBytes())); managerToken.setManagerName(managerLogin.getManagerName()); managerTokenDao.save(managerToken); LoginResponse response = new LoginResponse(Result.OK, LoginResponse.Msg.ok); response.setManagerToken(managerToken); return response; } } /** * 获取邮箱类型 */ @GetMapping("emailType") public EmailTypeResponse getEmailType() { EmailTypeResponse response = new EmailTypeResponse(Result.OK, EmailTypeResponse.Msg.ok); response.setEmailTypeList(emailTypeConfig.getSupportType()); return response; } // 注册 @PostMapping("register") public RegisterResponse register(@RequestBody ManagerRegister manager) { if (StringUtils.isEmpty(manager.getManagerName())) { return new RegisterResponse(Result.FAIL, RegisterResponse.Msg.manager); } else if (StringUtils.isEmpty(manager.getPassword())) { return new RegisterResponse(Result.FAIL, RegisterResponse.Msg.password); } else if (StringUtils.isEmpty(manager.getConfirmPassword())) { return new RegisterResponse(Result.FAIL, RegisterResponse.Msg.confirmPassword); } else if (!manager.getPassword().equals(manager.getConfirmPassword())) { return new RegisterResponse(Result.FAIL, RegisterResponse.Msg.passwordNotMatch); } else if (StringUtils.isEmpty(manager.getMobile())) { return new RegisterResponse(Result.FAIL, RegisterResponse.Msg.mobie); } else if (StringUtils.isEmpty(manager.getEmail())) { return new RegisterResponse(Result.FAIL, RegisterResponse.Msg.email); } else if (managerDao.hasUser(manager.getManagerName())) { return new RegisterResponse(Result.FAIL, RegisterResponse.Msg.username); } else { // 表单数据转换到管理员实体,调用dao层持久化到数据库 Manager m = new Manager(); m.setManagerName(manager.getManagerName()); m.setPassword(DigestUtils.md5DigestAsHex(manager.getPassword().getBytes())); m.setMobile(manager.getMobile()); m.setEmail(manager.getEmail()); managerDao.save(m); return new RegisterResponse(Result.OK, RegisterResponse.Msg.ok); } } //注销 @PostMapping("logout") public LogoutResponse logout(@RequestBody ManagerLogout managerLogout) { if (StringUtils.isEmpty(managerLogout.getManagerName())) { return new LogoutResponse(Result.FAIL, LogoutResponse.Msg.fail); } else { if (managerTokenDao.logout(managerLogout)) { return new LogoutResponse(Result.OK, LogoutResponse.Msg.ok); } else { return new LogoutResponse(Result.FAIL, LogoutResponse.Msg.fail); } } } //检查账号邮箱 @PostMapping("reset/checkEmail") public ResetpwdResponse checkUserWithEmail(@RequestBody ManagerResetPwd managerResetPwd) { if (managerDao.checkUserWithEmail(managerResetPwd)) { return new ResetpwdResponse(Result.OK, ResetpwdResponse.Msg.check_ok); } else { return new ResetpwdResponse(Result.FAIL, ResetpwdResponse.Msg.check_fail); } } /** * 发送邮件 */ @PostMapping("reset/code") public ResetpwdResponse sendEmail(@RequestBody ManagerResetPwd managerResetPwd) { if (emailService.sendManagerCode(managerResetPwd)) { return new ResetpwdResponse(Result.OK, ResetpwdResponse.Msg.send_code_ok); } else { return new ResetpwdResponse(Result.FAIL, ResetpwdResponse.Msg.send_code_fail); } } /** * 校验验证码 */ @PostMapping("reset/checkCode") public ResetpwdResponse validCode(@RequestBody ManagerResetPwd managerResetPwd) { if (emailDao.checkCode(managerResetPwd.getEmail() + managerResetPwd.getEmailType(), managerResetPwd.getVerificationCode())) { return new ResetpwdResponse(Result.OK, ResetpwdResponse.Msg.valid_code_ok); } else { return new ResetpwdResponse(Result.FAIL, ResetpwdResponse.Msg.valid_code_fail); } } /** * 重置密码 */ @PostMapping("reset/resetPwd") public ResetpwdResponse resetpwd(@RequestBody ManagerResetPwd managerResetPwd) { if (managerDao.resetpwd(managerResetPwd)) { return new ResetpwdResponse(Result.OK, ResetpwdResponse.Msg.resetpwd_ok); } else { return new ResetpwdResponse(Result.FAIL, ResetpwdResponse.Msg.resetpwd_fail); } } }