From cc752b0680d6f4975b14a3cdc2b8922e8d3bf0ee Mon Sep 17 00:00:00 2001
From: wayne <wayne8692wayne8692@gmail.com>
Date: 星期一, 29 十一月 2021 19:56:39 +0800
Subject: [PATCH] [update] Otp認證錯誤代碼規格調整

---
 pamapi/src/main/java/com/pollex/pam/web/rest/errors/CustomerNotRegisteredException.java |    8 ++++
 pamapi/src/main/java/com/pollex/pam/web/rest/OtpResource.java                           |    3 +
 pamapi/src/doc/登入API/客戶認證OTP並登入.txt                                                     |    7 ++-
 pamapi/src/main/java/com/pollex/pam/web/rest/errors/OtpLoginFailException.java          |   11 +++++
 pamapi/src/main/java/com/pollex/pam/security/provider/OtpAuthenticationProvider.java    |    6 +--
 pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java                         |   31 +++++++--------
 6 files changed, 42 insertions(+), 24 deletions(-)

diff --git "a/pamapi/src/doc/\347\231\273\345\205\245API/\345\256\242\346\210\266\350\252\215\350\255\211OTP\344\270\246\347\231\273\345\205\245.txt" "b/pamapi/src/doc/\347\231\273\345\205\245API/\345\256\242\346\210\266\350\252\215\350\255\211OTP\344\270\246\347\231\273\345\205\245.txt"
index 124c914..cdd2b1f 100644
--- "a/pamapi/src/doc/\347\231\273\345\205\245API/\345\256\242\346\210\266\350\252\215\350\255\211OTP\344\270\246\347\231\273\345\205\245.txt"
+++ "b/pamapi/src/doc/\347\231\273\345\205\245API/\345\256\242\346\210\266\350\252\215\350\255\211OTP\344\270\246\347\231\273\345\205\245.txt"
@@ -8,10 +8,13 @@
     "otpCode": "123" // �����縑蝞望�����Ⅳ
 }
 
-���ev銝剖恥�撣唾���撌崎eams��mail靽∠拳��� (�����垢撌亦�葦��A撣唾�歇蝬�末)��
 �ndexKey��tpCode�dev�銝��遙雿���隞亦���
 
-response body:
+response body: �Otp隤����府撣唾�歇閮餃�迨蝟餌絞
 {
     "id_token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ3YXluZUBwb2xsZXguY29tLnR3IiwiYXV0aCI6IlJPTEVfVVNFUiIsImRldGFpbHMiOnsiQ3VzdG9tZXJBY2NvdW50Ijoid2F5bmVAcG9sbGV4LmNvbS50dyIsIkN1c3RvbWVySWQiOiI2IiwiQ3VzdG9tZXJOYW1lIjoiV2F5bmUifSwiZXhwIjoxNjM3NjQ5NzUzfQ.6xqkWG7kQPUHOys8vPdx6ebgH1wgZ4gysFEa1t1jCnKB44VsFZ8PjtUlN2mvroBdGtPwpOynoTHU7HvAQ3_mnQ"
 }
+
+�Otp隤�隤斗��� 401嚗etail���府甈﹒tp蝟餌絞���隤方�
+�Otp隤�����府account撠閮餃���� 403
+���隞頂蝯梢隤斤絞銝����500
diff --git a/pamapi/src/main/java/com/pollex/pam/security/provider/OtpAuthenticationProvider.java b/pamapi/src/main/java/com/pollex/pam/security/provider/OtpAuthenticationProvider.java
index 675c809..3802087 100644
--- a/pamapi/src/main/java/com/pollex/pam/security/provider/OtpAuthenticationProvider.java
+++ b/pamapi/src/main/java/com/pollex/pam/security/provider/OtpAuthenticationProvider.java
@@ -1,16 +1,14 @@
 package com.pollex.pam.security.provider;
 
+import com.pollex.pam.web.rest.errors.CustomerNotRegisteredException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.authentication.AuthenticationCredentialsNotFoundException;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.stereotype.Component;
 
 import com.pollex.pam.domain.Customer;
-import com.pollex.pam.domain.OtpTmp;
-import com.pollex.pam.enums.OtpTmpStatusEnum;
 import com.pollex.pam.repository.CustomerRepository;
 import com.pollex.pam.security.token.OtpAuthenticationToken;
 import com.pollex.pam.service.CustomerAuthService;
@@ -46,7 +44,7 @@
     						.orElse(null);
 
     	if (customer == null) {
-    		throw new AuthenticationCredentialsNotFoundException("");
+    		throw new CustomerNotRegisteredException();
     	}
 
     	return customerAuthService.buildCustomerAuthToken(customer, otpCode, indexKey);
diff --git a/pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java b/pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java
index be48bd2..a0d7494 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java
@@ -2,6 +2,7 @@
 
 import com.pollex.pam.domain.OtpTmp;
 import com.pollex.pam.enums.OtpTmpStatusEnum;
+import com.pollex.pam.web.rest.errors.OtpLoginFailException;
 import com.pollex.pam.web.rest.vm.VerifyOtpVM;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -37,25 +38,21 @@
 
     @Transactional
     public void verifyOtp(String account, String indexKey, String otpCode) {
-    	try {
-            if(applicationProperty.isMockLogin()){
-                loginRecordService.saveOTPLoginSuccessRecord(account);
-                log.debug("Do MockLogin");
-            } else {  // otp logon
-                OtpResponseDTO otpResponseDTO = otpWebService.verifyOTP(indexKey, otpCode);
-                if (otpResponseDTO.isSuccess()) {
-                    loginRecordService.saveOTPLoginSuccessRecord(account);
-                }
-                else {
-                    loginRecordService.saveOTPLoginFailRecord(account, otpResponseDTO.getFailReason());
-                    throw new AuthenticationCredentialsNotFoundException("");
-                }
+        if (applicationProperty.isMockLogin()) {
+            log.debug("Do MockLogin");
+        } else {  // otp logon
+            OtpResponseDTO otpResponseDTO = otpWebService.verifyOTP(indexKey, otpCode);
+            if (otpResponseDTO.isSuccess()) {
+                log.info("otp login success!");
             }
-            setVerrifiedOtpTmp(account, indexKey);
-    	} catch (Exception e) {
-            log.error("Exception: ", e);
-            throw new AuthenticationCredentialsNotFoundException("");
+            else {
+                log.info("otp login fail... , account = {}, failReason = {}", account, otpResponseDTO.getFailReason());
+                loginRecordService.saveOTPLoginFailRecord(account, otpResponseDTO.getFailReason());
+                throw new OtpLoginFailException(otpResponseDTO.getFailReason());
+            }
         }
+        loginRecordService.saveOTPLoginSuccessRecord(account);
+        setVerrifiedOtpTmp(account, indexKey);
     }
 
     private void setVerrifiedOtpTmp(String account, String indexKey) {
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 dbb8c05..883c80a 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
@@ -3,6 +3,7 @@
 import java.util.Arrays;
 import java.util.UUID;
 
+import com.pollex.pam.web.rest.errors.CustomerNotRegisteredException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -90,7 +91,7 @@
     						.orElse(null);
 
     	if (customer == null) {
-    		return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
+    		return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
     	}
 
     	String jwt = customerAuthService.authorize(customer, verifyOtpParam.getIndexKey(), verifyOtpParam.getOtpCode());
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/CustomerNotRegisteredException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/CustomerNotRegisteredException.java
new file mode 100644
index 0000000..89acfc0
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/CustomerNotRegisteredException.java
@@ -0,0 +1,8 @@
+package com.pollex.pam.web.rest.errors;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+@ResponseStatus(code = HttpStatus.FORBIDDEN, reason = "CustomerNotRegistered")
+public class CustomerNotRegisteredException extends RuntimeException{
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/OtpLoginFailException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/OtpLoginFailException.java
new file mode 100644
index 0000000..65ff04f
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/OtpLoginFailException.java
@@ -0,0 +1,11 @@
+package com.pollex.pam.web.rest.errors;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+@ResponseStatus(code = HttpStatus.UNAUTHORIZED)
+public class OtpLoginFailException extends RuntimeException{
+    public OtpLoginFailException(String message) {
+        super(message);
+    }
+}

--
Gitblit v1.8.0