|
@@ -18,39 +18,33 @@
|
|
|
package org.maxkey.web.contorller;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
-import java.util.Date;
|
|
|
+import java.util.regex.Pattern;
|
|
|
+
|
|
|
import javax.servlet.ServletException;
|
|
|
-import org.apache.commons.mail.DefaultAuthenticator;
|
|
|
-import org.apache.commons.mail.EmailException;
|
|
|
-import org.apache.commons.mail.HtmlEmail;
|
|
|
-import org.apache.ibatis.session.SqlSession;
|
|
|
-import org.apache.ibatis.session.SqlSessionFactory;
|
|
|
+
|
|
|
+import org.maxkey.authn.jwt.AuthJwtService;
|
|
|
import org.maxkey.configuration.ApplicationConfig;
|
|
|
import org.maxkey.constants.ConstsStatus;
|
|
|
import org.maxkey.crypto.password.PasswordReciprocal;
|
|
|
-import org.maxkey.entity.Register;
|
|
|
+import org.maxkey.entity.Message;
|
|
|
import org.maxkey.entity.UserInfo;
|
|
|
-import org.maxkey.persistence.service.RegisterService;
|
|
|
+import org.maxkey.password.onetimepwd.AbstractOtpAuthn;
|
|
|
+import org.maxkey.password.onetimepwd.OtpAuthnService;
|
|
|
import org.maxkey.persistence.service.UserInfoService;
|
|
|
-import org.maxkey.util.DateUtils;
|
|
|
import org.maxkey.util.StringUtils;
|
|
|
import org.maxkey.web.WebContext;
|
|
|
-import org.maxkey.web.message.Message;
|
|
|
-import org.mybatis.spring.SqlSessionUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
+import org.springframework.http.MediaType;
|
|
|
+import org.springframework.http.ResponseEntity;
|
|
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
|
|
import org.springframework.stereotype.Controller;
|
|
|
-import org.springframework.web.bind.annotation.GetMapping;
|
|
|
import org.springframework.web.bind.annotation.ModelAttribute;
|
|
|
-import org.springframework.web.bind.annotation.PathVariable;
|
|
|
-import org.springframework.web.bind.annotation.PostMapping;
|
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
import org.springframework.web.bind.annotation.RequestParam;
|
|
|
import org.springframework.web.bind.annotation.ResponseBody;
|
|
|
-import org.springframework.web.servlet.ModelAndView;
|
|
|
|
|
|
|
|
|
@Controller
|
|
@@ -58,183 +52,81 @@ import org.springframework.web.servlet.ModelAndView;
|
|
|
public class RegisterController {
|
|
|
private static Logger _logger = LoggerFactory.getLogger(RegisterController.class);
|
|
|
|
|
|
+ Pattern mobileRegex = Pattern.compile("^[1][3,4,5,7,8][0-9]{9}$");
|
|
|
+
|
|
|
@Autowired
|
|
|
- RegisterService registerService;
|
|
|
+ AuthJwtService authJwtService;
|
|
|
|
|
|
@Autowired
|
|
|
- @Qualifier("applicationConfig")
|
|
|
protected ApplicationConfig applicationConfig;
|
|
|
|
|
|
@Autowired
|
|
|
- @Qualifier("userInfoService")
|
|
|
private UserInfoService userInfoService;
|
|
|
|
|
|
@Autowired
|
|
|
- private PasswordEncoder passwordEncoder;
|
|
|
-
|
|
|
-
|
|
|
- @RequestMapping(value={"/forward"})
|
|
|
- public ModelAndView forward() {
|
|
|
- _logger.debug("register /register/register.");
|
|
|
- return new ModelAndView("register/register");
|
|
|
- }
|
|
|
+ @Qualifier("otpAuthnService")
|
|
|
+ OtpAuthnService otpAuthnService;
|
|
|
|
|
|
- @RequestMapping(value={"/forward/email"})
|
|
|
- public ModelAndView forwardEmail() {
|
|
|
- _logger.debug("register /register/register.");
|
|
|
- return new ModelAndView("register/registerInst");
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @RequestMapping(value={"/register"})
|
|
|
- public ModelAndView reg(@ModelAttribute("register") Register register) {
|
|
|
- _logger.debug("register /register/register.");
|
|
|
- _logger.debug(""+register);
|
|
|
- ModelAndView modelAndView= new ModelAndView("register/registered");
|
|
|
-
|
|
|
- UserInfo userInfo = registerService.findByEmail(register.getWorkEmail());
|
|
|
-
|
|
|
- if(userInfo!=null){
|
|
|
- modelAndView.addObject("registered", 1);
|
|
|
- return modelAndView;
|
|
|
- }
|
|
|
-
|
|
|
- register.setId(register.generateId());
|
|
|
- registerService.insert(register);
|
|
|
- HtmlEmail email = new HtmlEmail();
|
|
|
-
|
|
|
- try {
|
|
|
- email.setHostName(applicationConfig.getEmailConfig().getSmtpHost());
|
|
|
- email.setSmtpPort(applicationConfig.getEmailConfig().getPort());
|
|
|
- email.setAuthenticator(new DefaultAuthenticator(
|
|
|
- applicationConfig.getEmailConfig().getUsername(),
|
|
|
- applicationConfig.getEmailConfig().getPassword()
|
|
|
- ));
|
|
|
-
|
|
|
- email.addTo(register.getWorkEmail(), register.getDisplayName());
|
|
|
- email.setFrom(applicationConfig.getEmailConfig().getSender(), "MaxKey");
|
|
|
- email.setSubject("MaxKey Identity & Access Registration activate Email .");
|
|
|
-
|
|
|
- String activateUrl=WebContext.getHttpContextPath()+"/register/forward/activate/"+register.getId();
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- String emailText="<html>";
|
|
|
- emailText+="<a href='"+activateUrl+"'>activate</a><br>";
|
|
|
- emailText+=" or copy "+activateUrl+" to brower.";
|
|
|
- emailText+="</html>";
|
|
|
- email.setHtmlMsg(emailText);
|
|
|
-
|
|
|
-
|
|
|
- email.setTextMsg("Your email client does not support HTML messages");
|
|
|
-
|
|
|
-
|
|
|
- email.send();
|
|
|
- } catch (EmailException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- modelAndView.addObject("registered", 0);
|
|
|
- return modelAndView;
|
|
|
- }
|
|
|
-
|
|
|
- @GetMapping(value={"/forward/activate/{id}"})
|
|
|
- public ModelAndView confirm(@PathVariable("id") String id) {
|
|
|
- _logger.debug("register /register/forward/activate.");
|
|
|
- Register register=registerService.get(id);
|
|
|
- ModelAndView mav=new ModelAndView("register/activate");
|
|
|
- if(register!=null){
|
|
|
- mav.addObject("model", register);
|
|
|
- }
|
|
|
-
|
|
|
- return mav;
|
|
|
- }
|
|
|
-
|
|
|
- @PostMapping(value={"/activate/{id}"})
|
|
|
- public ModelAndView setPassWord(@PathVariable("id") String id,
|
|
|
- @RequestParam String password,
|
|
|
- @RequestParam String confirmpassword) {
|
|
|
- _logger.debug("register /register/setpassword.");
|
|
|
- ModelAndView modelAndView=new ModelAndView("register/activated");
|
|
|
- if(password.equals(confirmpassword)){
|
|
|
- Register register=registerService.get(id);
|
|
|
- if(register!=null){
|
|
|
- SqlSession sqlSession = SqlSessionUtils.getSqlSession(
|
|
|
- WebContext.getBean("sqlSessionFactory",SqlSessionFactory.class));
|
|
|
- sqlSession.commit(false);
|
|
|
-
|
|
|
- UserInfo userInfo=new UserInfo();
|
|
|
- userInfo.setUsername(register.getWorkEmail());
|
|
|
- userInfo.setDisplayName(register.getDisplayName());
|
|
|
-
|
|
|
- userInfo.setWorkPhoneNumber(register.getWorkPhone());
|
|
|
- userInfo.setEmail(register.getWorkEmail());
|
|
|
- userInfo.setStatus(ConstsStatus.ACTIVE);
|
|
|
- userInfo.setDecipherable(PasswordReciprocal.getInstance().encode(password));
|
|
|
-
|
|
|
- password = passwordEncoder.encode(password );
|
|
|
- userInfo.setPassword(password);
|
|
|
-
|
|
|
- if(StringUtils.isEmpty(userInfo.getInstId())) {
|
|
|
- userInfo.setInstId("1");
|
|
|
- }
|
|
|
- userInfo.setPasswordLastSetTime(DateUtils.format(new Date(), DateUtils.FORMAT_DATE_YYYY_MM_DD_HH_MM_SS));
|
|
|
- userInfoService.insert(userInfo);
|
|
|
-
|
|
|
- registerService.remove(id);
|
|
|
- sqlSession.commit(true);
|
|
|
- modelAndView.addObject("activate", 1);
|
|
|
- }else{
|
|
|
- modelAndView.addObject("activate", 2);
|
|
|
- }
|
|
|
- }else{
|
|
|
- modelAndView.addObject("activate", 0);
|
|
|
- }
|
|
|
- return modelAndView;
|
|
|
- }
|
|
|
+ @Autowired
|
|
|
+ private PasswordEncoder passwordEncoder;
|
|
|
|
|
|
+ @ResponseBody
|
|
|
+ @RequestMapping(value = { "/produceOtp" }, produces = {MediaType.APPLICATION_JSON_VALUE})
|
|
|
+ public ResponseEntity<?> produceOtp(
|
|
|
+ @RequestParam String mobile) {
|
|
|
+ _logger.debug("/signup/produceOtp Mobile {}: " ,mobile);
|
|
|
+
|
|
|
+ _logger.debug("Mobile Regex matches {}",mobileRegex.matcher(mobile).matches());
|
|
|
+ if(StringUtils.isNotBlank(mobile) && mobileRegex.matcher(mobile).matches()) {
|
|
|
+ UserInfo userInfo = new UserInfo();
|
|
|
+ userInfo.setUsername(mobile);
|
|
|
+ userInfo.setMobile(mobile);
|
|
|
+ AbstractOtpAuthn smsOtpAuthn = otpAuthnService.getByInstId(WebContext.getInst().getId());
|
|
|
+ smsOtpAuthn.produce(userInfo);
|
|
|
+ return new Message<UserInfo>(userInfo).buildResponse();
|
|
|
+ }
|
|
|
+
|
|
|
+ return new Message<UserInfo>(Message.FAIL).buildResponse();
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
- @RequestMapping(value={"/registeron"})
|
|
|
+ @RequestMapping(value={"/register"})
|
|
|
@ResponseBody
|
|
|
- public Message registeron(UserInfo userInfo,@RequestParam String emailMobile) throws ServletException, IOException {
|
|
|
-
|
|
|
- if(StringUtils.isEmpty(emailMobile)) {
|
|
|
- return new Message(WebContext.getI18nValue("register.emailMobile.error"),"1");
|
|
|
- }
|
|
|
-
|
|
|
- if(StringUtils.isValidEmail(emailMobile)) {
|
|
|
- userInfo.setEmail(emailMobile);
|
|
|
- }
|
|
|
-
|
|
|
- if(StringUtils.isValidMobileNo(emailMobile)) {
|
|
|
- userInfo.setMobile(emailMobile);
|
|
|
- }
|
|
|
-
|
|
|
- if(!(StringUtils.isValidEmail(emailMobile)||StringUtils.isValidMobileNo(emailMobile))) {
|
|
|
- return new Message(WebContext.getI18nValue("register.emailMobile.error"),"1");
|
|
|
- }
|
|
|
-
|
|
|
- UserInfo temp = userInfoService.findByEmailMobile(emailMobile);
|
|
|
-
|
|
|
- if(temp!=null) {
|
|
|
- return new Message(WebContext.getI18nValue("register.emailMobile.exist"),"1");
|
|
|
- }
|
|
|
-
|
|
|
- temp = userInfoService.findByUsername(userInfo.getUsername());
|
|
|
- if(temp!=null) {
|
|
|
- return new Message(WebContext.getI18nValue("register.user.error"),"1");
|
|
|
- }
|
|
|
-
|
|
|
- if(StringUtils.isEmpty(userInfo.getInstId())) {
|
|
|
- userInfo.setInstId("1");
|
|
|
- }
|
|
|
-
|
|
|
- userInfo.setStatus(ConstsStatus.ACTIVE);
|
|
|
-
|
|
|
- if(userInfoService.insert(userInfo)) {
|
|
|
- return new Message(WebContext.getI18nValue("login.text.register.success"),"0");
|
|
|
+ public ResponseEntity<?> register(
|
|
|
+ @ModelAttribute UserInfo userInfo,
|
|
|
+ @RequestParam String captcha) throws ServletException, IOException {
|
|
|
+ UserInfo validateUserInfo = new UserInfo();
|
|
|
+ validateUserInfo.setUsername(userInfo.getMobile());
|
|
|
+ validateUserInfo.setMobile(userInfo.getMobile());
|
|
|
+ AbstractOtpAuthn smsOtpAuthn = otpAuthnService.getByInstId(WebContext.getInst().getId());
|
|
|
+ if (smsOtpAuthn !=null
|
|
|
+ && smsOtpAuthn.validate(validateUserInfo, captcha)){
|
|
|
+ UserInfo temp = userInfoService.findByEmailMobile(userInfo.getEmail());
|
|
|
+
|
|
|
+ if(temp != null) {
|
|
|
+ return new Message<UserInfo>(Message.FAIL).buildResponse();
|
|
|
+ }
|
|
|
+
|
|
|
+ temp = userInfoService.findByUsername(userInfo.getUsername());
|
|
|
+ if(temp != null) {
|
|
|
+ return new Message<UserInfo>(Message.FAIL).buildResponse();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if(StringUtils.isEmpty(userInfo.getInstId())) {
|
|
|
+ userInfo.setInstId("1");
|
|
|
+ }
|
|
|
+ String password = userInfo.getPassword();
|
|
|
+ userInfo.setDecipherable(PasswordReciprocal.getInstance().encode(password));
|
|
|
+ password = passwordEncoder.encode(password );
|
|
|
+ userInfo.setPassword(password);
|
|
|
+ userInfo.setStatus(ConstsStatus.INACTIVE);
|
|
|
+
|
|
|
+ if(userInfoService.insert(userInfo)) {
|
|
|
+ return new Message<UserInfo>().buildResponse();
|
|
|
+ }
|
|
|
}
|
|
|
- return new Message(WebContext.getI18nValue("login.text.register.error"),"1");
|
|
|
-
|
|
|
+ return new Message<UserInfo>(Message.FAIL).buildResponse();
|
|
|
}
|
|
|
|
|
|
}
|