package se.cloud.analysis.service; import jdk.nashorn.internal.objects.Global; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import se.cloud.analysis.dao.UserDao; import se.cloud.analysis.domain.User; import se.cloud.analysis.exception.GlobalException; import se.cloud.analysis.redis.RedisService; import se.cloud.analysis.redis.UserKey; import se.cloud.analysis.result.CodeMsg; import se.cloud.analysis.utils.MD5Util; import se.cloud.analysis.utils.SaltUtil; import se.cloud.analysis.utils.UUIDUtil; import se.cloud.analysis.vo.InformationVO; import se.cloud.analysis.vo.LoginVO; import se.cloud.analysis.vo.RegisterVO; import sun.security.provider.MD5; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletResponse; @Service public class UserService { @Autowired private UserDao userDao; @Autowired private RedisService redisService; public static final String COOKIE_NAME_TOKEN = "se_education_cloud_data_analysis_token"; public User getUserByEmail(String email) { return userDao.getUserByEmail(email); } public User getUserByToken(String token) { return redisService.get(UserKey.getKeyByTokenAndDefaultExpireTime(token).getKey(), User.class); } public int updateUser(User user) { return userDao.updateUser(user); } public int delete(String email) { return userDao.deleteUser(email); } public InformationVO getInformationByEmail(String email) { User user = getUserByEmail(email); if (user == null) { throw new GlobalException(CodeMsg.EMAIL_NOT_EXIST); } else { return InformationVO.userToInformationVO(user); } } public InformationVO getInformationByToken(String token) { if (StringUtils.isEmpty(token)) { throw new GlobalException(CodeMsg.TOKEN_EMPTY); } User user = getUserByToken(token); if (user == null) { throw new GlobalException(CodeMsg.TOKEN_HAS_EXPIRED); } return InformationVO.userToInformationVO(user); } public boolean register(RegisterVO registerVO) { if (registerVO == null) { throw new GlobalException(CodeMsg.SERVER_ERROR); } String email = registerVO.getEmail(); String formPassword = registerVO.getPassword(); String name = registerVO.getName(); if (getUserByEmail(email) != null) { throw new GlobalException(CodeMsg.USER_ALREADY_EXISTS); } User user = new User(); String randomSalt = SaltUtil.generateRandomSalt(); user.setEmail(email); user.setPassword(MD5Util.formPassToDbPass(formPassword, randomSalt)); user.setName(name); user.setSalt(randomSalt); if (userDao.insertUser(user) == 1) { return true; } else { throw new GlobalException(CodeMsg.SERVER_ERROR); } } public boolean login(HttpServletResponse response, LoginVO loginVO) { if (loginVO == null) { throw new GlobalException(CodeMsg.SERVER_ERROR); } String email = loginVO.getEmail(); String formPass = loginVO.getPassword(); //判断邮箱是否存在 User user = getUserByEmail(email); if (user == null) { throw new GlobalException(CodeMsg.EMAIL_NOT_EXIST); } //验证密码 String dbPass = user.getPassword(); String dbSalt = user.getSalt(); String calculatePass = MD5Util.formPassToDbPass(formPass, dbSalt); if (!calculatePass.equals(dbPass)) { throw new GlobalException(CodeMsg.PASSWORD_ERROR); } //生成Cookie String token = UUIDUtil.uuid(); UserKey redisKey = UserKey.getKeyByTokenAndDefaultExpireTime(token); redisService.set(redisKey, user); Cookie cookie = new Cookie(COOKIE_NAME_TOKEN, token); cookie.setMaxAge(redisKey.getExpireSeconds()); cookie.setPath("/"); response.addCookie(cookie); return true; } }