From e7ff6eaf7ffd713d102f596b4e5d906504160ff8 Mon Sep 17 00:00:00 2001
From: Jack <jack.su@pollex.com.tw>
Date: 星期二, 23 十一月 2021 18:34:23 +0800
Subject: [PATCH] [ADD] 客戶註冊的API

---
 pamapi/src/main/java/com/pollex/pam/web/rest/OtpResource.java |   53 ++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 34 insertions(+), 19 deletions(-)

diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/OtpResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/OtpResource.java
index 6308dac..d2ba706 100644
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/OtpResource.java
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/OtpResource.java
@@ -5,7 +5,11 @@
 import com.pollex.pam.security.jwt.JWTFilter;
 import com.pollex.pam.security.jwt.TokenProvider;
 import com.pollex.pam.security.token.OtpAuthenticationToken;
+import com.pollex.pam.service.CustomerAuthService;
+import com.pollex.pam.service.CustomerService;
+import com.pollex.pam.service.OtpTmpService;
 import com.pollex.pam.service.OtpWebService;
+import com.pollex.pam.service.dto.CustomerRegisterDTO;
 import com.pollex.pam.service.dto.OtpResponseDTO;
 import com.pollex.pam.web.rest.vm.*;
 import org.slf4j.Logger;
@@ -40,22 +44,33 @@
 
     @Autowired
     TokenProvider tokenProvider;
+    
+    @Autowired
+    CustomerAuthService customerAuthService;
+    
+    @Autowired
+    OtpTmpService otpTmpService;
+    
+    @Autowired
+    CustomerService customerService;
 
     @PostMapping("/sendOtp")
     public ResponseEntity<Object> sendOtp(@RequestBody OtpLoginVM login) {
-        try {
+    	OtpResponseDTO otpResponse;
+    	try {
             if(applicationProperty.isMockLogin()) {
-                return new ResponseEntity<>(getMockSendOtpResponse(), HttpStatus.OK);
-            }
-
-            if(login.getLoginType() == OtpLoginTypeEnum.SMS) {
-                return new ResponseEntity<>(otpWebService.sendByPhone(login.getAccount()), HttpStatus.OK);
+            	otpResponse = getMockSendOtpResponse();
+            }else if(login.getLoginType() == OtpLoginTypeEnum.SMS) {
+            	otpResponse = otpWebService.sendByPhone(login.getAccount());
             }
             else if(login.getLoginType() == OtpLoginTypeEnum.EMAIL) {
-                return new ResponseEntity<>(otpWebService.sendByEmail(login.getAccount()), HttpStatus.OK);
+            	otpResponse = otpWebService.sendByEmail(login.getAccount());
+            }else {
+            	return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("can not support this login type, loginType = " + login.getLoginType().name());
             }
-
-            return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("can not support this login type, loginType = " + login.getLoginType().name());
+            otpTmpService.createOtpTmp(login.getAccount(), otpResponse.getIndexKey());
+            return new ResponseEntity<>(otpResponse, HttpStatus.OK);
+            
         } catch (ServiceException | RemoteException e) {
             return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("connecting otp web service error");
         }
@@ -63,22 +78,22 @@
 
     @PostMapping("/verify")
     public ResponseEntity<UserJWTController.JWTToken> verifyOtp(@RequestBody VerifyOtpVM verifyOtpParam) {
-        OtpAccount otpAccount = new OtpAccount(verifyOtpParam.getAccount(), verifyOtpParam.getIndexKey());
-        OtpAuthenticationToken authenticationToken = new OtpAuthenticationToken(
-            otpAccount,
-            verifyOtpParam.getOtpCode()
-        );
-
-        Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken);
-        SecurityContextHolder.getContext().setAuthentication(authenticationToken);
-        String jwt = tokenProvider.createToken(authentication, false);
+        String jwt = customerAuthService.authorize(verifyOtpParam.getAccount(), verifyOtpParam.getIndexKey(), verifyOtpParam.getOtpCode());
         HttpHeaders httpHeaders = new HttpHeaders();
         httpHeaders.add(JWTFilter.AUTHORIZATION_HEADER, "Bearer" + jwt);
         return new ResponseEntity<>(new UserJWTController.JWTToken(jwt), httpHeaders, HttpStatus.OK);
     }
-
+ 
     private OtpResponseDTO getMockSendOtpResponse() {
         String indexKey = UUID.randomUUID().toString().substring(0, 8);
         return new OtpResponseDTO(new String[]{indexKey, "0", "", ""});
     }
+    
+    @PostMapping("/register")
+    public ResponseEntity<UserJWTController.JWTToken> registerAccount(@RequestBody CustomerRegisterDTO registDTO) {
+    	String jwt = customerService.registerCustomer(registDTO);
+    	HttpHeaders httpHeaders = new HttpHeaders();
+        httpHeaders.add(JWTFilter.AUTHORIZATION_HEADER, "Bearer" + jwt);
+        return new ResponseEntity<>(new UserJWTController.JWTToken(jwt), httpHeaders, HttpStatus.OK);
+    }
 }

--
Gitblit v1.8.0