package me.mofun.controller; import cn.hutool.http.HTMLFilter; import com.alibaba.druid.support.json.JSONUtils; import me.mofun.entity.User; import me.mofun.service.IUserService; import me.mofun.util.*; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.net.URLEncoder; import java.util.Date; import java.util.Random; @Controller @RequestMapping("/register") public class RegisterController implements Serializable { private static final long serialVersionUID = 5054777863371691520L; @Autowired private IUserService userService; public static IPSeeker seeker = new IPSeeker(); static HTMLFilter htmlFilter = new HTMLFilter(); @GetMapping("/index.html") public ModelAndView index(@RequestParam(required = false) String forward, HttpServletRequest request) { ModelAndView mav = new ModelAndView(); if (StringUtil.isNotBlank(forward)) { forward = htmlFilter.filter(forward); mav.addObject("forward", forward); } Cookie[] cookies = request.getCookies(); if (request.isRequestedSessionIdFromCookie() && cookies != null) { for (Cookie cookie : cookies) { if (cookie.getName().equals("userId") && StringUtils.isNotBlank(cookie.getValue())) { mav.setViewName("/WEB-INF/template/register/index"); return mav; } } } mav.setViewName("/WEB-INF/template/register/index"); return mav; } @PostMapping("/register") public void register(@RequestParam String str, @RequestParam String userPwd, HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/plain;charset=UTF-8"); PrintWriter out = response.getWriter(); str = htmlFilter.filter(str); userPwd = htmlFilter.filter(userPwd); User user = new User(); String ip = request.getHeader("X-Real-IP"); if (ip == null) { ip = "127.0.0.1"; } String date = DateUtil.DateTimeToStr(new Date()); if (str.indexOf("@") != -1) { user.setMail(str); user.setMailCheck("3"); user.setMobileCheck("3"); if (StringUtils.isNotBlank(userPwd)) { user.setUserPwd(userPwd); } user.setIpAddress(ip); user.setIpLocation(seeker.getAddress(ip)); user.setOldDate(date); user.setNewDate(date); user.setBalance(BigDecimal.valueOf(ApplicationListenerImpl.sysConfigureJson.getRegBalance())); user.setCommissionBalance(0.00); user.setCommissionCount(0.00); user.setCommissionMention(0.00); user.setCommissionPoints(0); user.setFaceImg("/Images/defaultUserFace.png"); user.setUserType("0"); user.setExperience(0); Cookie[] cookies = request.getCookies(); if (request.isRequestedSessionIdFromCookie() && cookies != null) { for (Cookie cookie : cookies) { if (cookie.getName().equals("inviteId") && StringUtils.isNotBlank(cookie.getValue())) { user.setInvite(Integer.parseInt(cookie.getValue())); break; } } } try { userService.add(user); out.print("true"); } catch (Exception e) { e.printStackTrace(); out.print("false"); } } else { if (StringUtils.isNotBlank(userPwd)) { MemCachedClientHelp.getIMemcachedCache().put(str, userPwd, new Date(10 * 60 * 1000)); out.print("true"); } else { out.print("false"); } } out.flush(); out.close(); } @GetMapping("/mobilecheck") @ResponseBody public ModelAndView mobilecheck(@RequestParam String str, HttpServletRequest request, HttpServletResponse response) throws IOException { ModelAndView mav = new ModelAndView(); if (MemCachedClientHelp.getIMemcachedCache().get(str) == null) { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.print(""); out.flush(); out.close(); return null; } else { mav.addObject("isVerify", Base64.getEncode(str)); mav.setViewName("mobilecheck"); return mav; } } @PostMapping("/regSendMes") @ResponseBody public void regSendMes(@RequestParam String isVerify, @RequestParam String phone, HttpServletResponse response) throws Exception { response.setContentType("text/plain;charset=UTF-8"); PrintWriter out = response.getWriter(); Random random = new Random(); String ran = ""; for (int i = 0; i < 6; i++) { ran += random.nextInt(9); } if (isVerify.equals(Base64.getEncode(phone))) { if (MemCachedClientHelp.getIMemcachedCache().get(Base64.getEncode(phone)) == null) { try { boolean result = SendSMS.sendSMS(phone, ran); if (result) { MemCachedClientHelp.getIMemcachedCache().put(Base64.getEncode(phone), ran, new Date(2 * 60 * 1000)); out.print("0"); } else { out.print("error"); } } catch (Exception e) { e.printStackTrace(); out.print("error"); } } else { out.print("2"); } } else { out.print("error"); } out.flush(); out.close(); } @PostMapping("/checkMobileCode") @ResponseBody public void checkMobileCode(@RequestParam String isVerify, @RequestParam String key, HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/plain;charset=UTF-8"); PrintWriter out = response.getWriter(); User user = new User(); String ip = request.getHeader("X-Real-IP"); if (ip == null) { ip = "127.0.0.1"; } String date = DateUtil.DateTimeToStr(new Date()); try { if (MemCachedClientHelp.getIMemcachedCache().get(isVerify) != null) { if (MemCachedClientHelp.getIMemcachedCache().get(isVerify).equals(key)) { String phone = Base64.getDecode(isVerify); user.setPhone(phone); user.setMailCheck("3"); user.setMobileCheck("0"); String userPwd = (String) MemCachedClientHelp.getIMemcachedCache().get(phone); if (StringUtils.isBlank(userPwd)) { out.print("timeOut"); out.flush(); out.close(); return; } user.setUserPwd(userPwd); user.setIpAddress(ip); user.setIpLocation(seeker.getAddress(ip)); user.setOldDate(date); user.setNewDate(date); user.setBalance(BigDecimal.valueOf(ApplicationListenerImpl.sysConfigureJson.getRegBalance())); user.setCommissionBalance(0.00); user.setCommissionCount(0.00); user.setCommissionMention(0.00); user.setCommissionPoints(0); user.setFaceImg("/Images/defaultUserFace.png"); user.setUserType("0"); user.setExperience(0); Cookie[] cookies = request.getCookies(); if (request.isRequestedSessionIdFromCookie() && cookies != null) { for (Cookie cookie : cookies) { if (cookie.getName().equals("inviteId") && StringUtils.isNotBlank(cookie.getValue())) { user.setInvite(Integer.parseInt(cookie.getValue())); break; } } } try { userService.add(user); out.print("0"); } catch (Exception e) { e.printStackTrace(); out.print("false"); } } else { out.print("1"); } } } catch (Exception e) { e.printStackTrace(); out.print("false"); } out.flush(); out.close(); } @GetMapping("/mobileok") public ModelAndView mobileok(@RequestParam String phone, HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException { ModelAndView mav = new ModelAndView("mobileok"); User user = userService.userByName(phone); String isVerify = "1"; if (user != null) { if (user.getMobileCheck().equals("0")) { isVerify = "0"; if (request.isRequestedSessionIdFromCookie()) { Cookie cookie = new Cookie("phone", user.getPhone()); cookie.setMaxAge(-1); cookie.setPath("/"); cookie.setDomain(ApplicationListenerImpl.sysConfigureJson.getDomain()); response.addCookie(cookie); Cookie cookie2 = new Cookie("userId", String.valueOf(user.getUserId())); cookie2.setMaxAge(-1); cookie2.setPath("/"); cookie2.setDomain(ApplicationListenerImpl.sysConfigureJson.getDomain()); response.addCookie(cookie2); Cookie cookie3 = new Cookie("face", URLEncoder.encode(user.getFaceImg(), "UTF-8")); cookie3.setMaxAge(-1); cookie3.setPath("/"); cookie3.setDomain(ApplicationListenerImpl.sysConfigureJson.getDomain()); response.addCookie(cookie3); } } } mav.addObject("isVerify", isVerify); return mav; } @GetMapping("/emailcheck") public ModelAndView emailcheck(@RequestParam String str, HttpServletRequest request, HttpServletResponse response) throws IOException { ModelAndView mav = new ModelAndView(); User user = userService.userByName(str); if (user == null) { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.print(""); out.flush(); out.close(); return null; } else { mav.addObject("isVerify", user.getMailCheck()); mav.setViewName("emailcheck"); return mav; } } @PostMapping("/SendRegisterMail") public void SendRegisterMail(@RequestParam String mail, HttpServletResponse response) throws IOException { response.setContentType("text/plain;charset=UTF-8"); PrintWriter out = response.getWriter(); String key = MD5Util.encode(mail) + MD5Util.encode(DateUtil.dateTimeToStr(new Date())) + Base64.getEncode(mail + "|" + DateUtil.DateToStr(new Date(), "yyyyMMdd")); String html = "