fairnet/src/main/java/kcc/let/uat/uia/web/SocialCertController.java

390 lines
12 KiB
Java

package kcc.let.uat.uia.web;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.barocert.BarocertException;
import com.barocert.kakaocert.KakaocertService;
import com.barocert.navercert.NavercertService;
import com.fasterxml.jackson.databind.ObjectMapper;
import kcc.let.uat.uia.service.CertService;
import kcc.let.uat.uia.service.CertVO;
import seed.utils.FairnetUtils;
import seed.utils.SeedUtils;
import seed.utils.kCertDecryptor;
import seed.utils.nCertDecryptor;
/**
* @packageName : kcc.let.uat.uia.web
* @fileName : SocialCertController.java
* @author : JunHo Lee
* @date : 2024.11.21
* @description : 소셜 로그인(네이버, 카카오)
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2024.11.21 JunHo Lee 최초 생성
*/
/**
* @packageName : kcc.let.uat.uia.web
* @fileName : SocialCertController.java
* @author : JunHo Lee
* @date : 2024.11.21
* @description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2024.11.21 JunHo Lee 최초 생성
*/
@Controller
public class SocialCertController {
@Autowired
private NavercertService navercertService;
@Autowired
private KakaocertService kakaocertService;
@Autowired
private CertService certService;
@Value("#{NAVER_CONFIG.ClientCode}")
private String NaverClientCode;
@Value("#{KAKAO_CONFIG.ClientCode}")
private String KakaoClientCode;
/**
* @methodName : nCertStep1
* @author : JunHo Lee
* @date : 2024.11.21
* @description :
* @param m
* @return
* @throws Exception
*/
@RequestMapping(value = "/web/user/cert/nCertStep1.do")
public String nCertStep1(Model m) throws Exception {
return "uat/uia/NCertStep1";
}
/**
* @methodName : kCertStep1
* @author : JunHo Lee
* @date : 2024.11.21
* @description :
* @param m
* @return
* @throws Exception
*/
@RequestMapping(value = "/web/user/cert/kCertStep1.do")
public String kCertStep1(Model m) throws Exception {
return "uat/uia/KCertStep1";
}
/**
* @methodName : nCertStep2
* @author : JunHo Lee
* @date : 2024.11.21
* @description :
* @param m
* @param certVO
* @return
* @throws BarocertException
*/
@RequestMapping(value = "/web/user/cert/nCertStep2.do")
public String nCertStep2(Model m, CertVO certVO) throws BarocertException {
// 본인인증 요청 정보 객체
com.barocert.navercert.identity.Identity identity = new com.barocert.navercert.identity.Identity();
// 수신자 휴대폰번호 - 11자 (하이픈 제외)
identity.setReceiverHP(navercertService.encrypt(certVO.getPhone()));
// 수신자 성명 - 80자
identity.setReceiverName(navercertService.encrypt(certVO.getName()));
// 수신자 생년월일 - 8자 (yyyyMMdd)
identity.setReceiverBirthday(navercertService.encrypt(certVO.getBirth()));
// 고객센터 연락처 - 최대 12자
identity.setCallCenterNum("1600-9854");
// 인증요청 만료시간 - 최대 1,000(초)까지 입력 가능
identity.setExpireIn(1000);
// AppToApp 인증요청 여부
// true - AppToApp 인증방식, false - 푸시(Push) 인증방식
identity.setAppUseYN(false);
try {
com.barocert.navercert.identity.IdentityReceipt request = navercertService.requestIdentity(NaverClientCode, identity);
m.addAttribute("request", request);
} catch (BarocertException ne) {
m.addAttribute("Exception", "요청에 실패했습니다.");
return "redirect:/web/user/cert/nCertStep1.do";
}
return "uat/uia/NCertStep2";
}
/**
* @methodName : kCertStep2
* @author : JunHo Lee
* @date : 2024.11.21
* @description :
* @param m
* @return
* @throws BarocertException
*/
@RequestMapping(value = "/web/user/cert/kCertStep2.do")
public String kCertStep2(Model m, CertVO certVO) throws BarocertException {
// 본인인증 요청 정보 객체
com.barocert.kakaocert.identity.Identity identity = new com.barocert.kakaocert.identity.Identity();
// 수신자 휴대폰번호 - 11자 (하이픈 제외)
identity.setReceiverHP(kakaocertService.encrypt(certVO.getPhone()));
// 수신자 성명 - 80자
identity.setReceiverName(kakaocertService.encrypt(certVO.getName()));
// 수신자 생년월일 - 8자 (yyyyMMdd)
identity.setReceiverBirthday(kakaocertService.encrypt(certVO.getBirth()));
// 인증요청 메시지 제목 - 최대 40자
identity.setReqTitle("분쟁조정사건처리시스템 본인인증");
// 커스텀 메시지 - 최대 500자
identity.setExtraMessage(kakaocertService.encrypt("한국공정거래조정원 분쟁조정사건처리시스템 본인인증 요청입니다."));
// 인증요청 만료시간 - 최대 1,000(초)까지 입력 가능
identity.setExpireIn(1000);
// 서명 원문 - 최대 40자 까지 입력가능
identity.setToken(kakaocertService.encrypt("본인인증 요청 원문"));
// AppToApp 인증요청 여부
// true - AppToApp 인증방식, false - Talk Message 인증방식
identity.setAppUseYN(false);
try {
com.barocert.kakaocert.identity.IdentityReceipt request = kakaocertService.requestIdentity(KakaoClientCode, identity);
m.addAttribute("request", request);
} catch (BarocertException ke) {
m.addAttribute("Exception", ke);
return "redirect:/web/user/cert/kCertStep1.do";
}
return "uat/uia/KCertStep2";
}
/**
* @methodName : nCertStep3Ajax
* @author : JunHo Lee
* @date : 2024.11.21
* @description :
* @param reqeust
* @param repn
* @return
* @throws BarocertException
*/
@RequestMapping(value = "/web/user/cert/nCertStep3Ajax.do")
public ResponseEntity<?> nCertStep3Ajax(HttpServletRequest reqeust, HttpServletResponse repn, CertVO certVO) {
Map<String, String> returnData = new HashMap<String, String>();
com.barocert.navercert.identity.IdentityStatus status = null;
try {
status = navercertService.getIdentityStatus(NaverClientCode, certVO.getReceiptID());
} catch (BarocertException e) {
returnData.put("result", "requestFail");
returnData.put("msg", "인증과정에 문제가 발생했습니다. 화면을 새로고침 후 다시 시도해 주세요.");
return new ResponseEntity<>(returnData, HttpStatus.OK);
}
if(status != null && status.getState() == 1) {
com.barocert.navercert.identity.IdentityResult result = null;
try {
result = navercertService.verifyIdentity(NaverClientCode, certVO.getReceiptID());
} catch (BarocertException e) {
returnData.put("result", "requestFail");
returnData.put("msg", "인증과정에 문제가 발생했습니다. 화면을 새로고침 후 다시 시도해 주세요.");
return new ResponseEntity<>(returnData, HttpStatus.OK);
}
returnData.put("result", "success");
returnData.put("msg", "인증되었습니다.");
//세션 등록
FairnetUtils.setCertSession(reqeust, nDecrypt(result.getReceiverName()), nDecrypt(result.getReceiverHP()), "");
certVO.setPhone(nDecrypt(result.getReceiverHP()));
certVO.setName(nDecrypt(result.getReceiverName()));
String ori = "ReceiptID: " + result.getReceiptID()
+ ", ReceiverDay: " + nDecrypt(result.getReceiverDay())
+ ", ReceiverEmail: " + nDecrypt(result.getReceiverEmail())
+ ", ReceiverForeign: " + nDecrypt(result.getReceiverForeign())
+ ", ReceiverGender: " + nDecrypt(result.getReceiverGender())
+ ", ReceiverHP: " + nDecrypt(result.getReceiverHP())
+ ", ReceiverName: " + nDecrypt(result.getReceiverName())
+ ", ReceiverYear: " + nDecrypt(result.getReceiverYear())
// + ", SignedData: " + result.getSignedData()
+ ", State: " + result.getState()
+ ", Ci: " + nDecrypt(result.getCi());
certVO.setCertOri(ori);
certVO.setCertType("N");
try {
//인증 사용자 insert
certService.insertCert(certVO);
//인증 로그 insert
certService.insertCertLog(certVO);
} catch (Exception e) {
System.out.println("인증 정보 등록 실패!!!!!!!!!");
}
return new ResponseEntity<>(returnData, HttpStatus.OK);
}else {
returnData.put("result", "fail");
returnData.put("msg", "인증 후 다시 클릭해 주세요.");
return new ResponseEntity<>(returnData, HttpStatus.OK);
}
}
@RequestMapping(value = "/web/user/cert/kCertStep3Ajax.do")
public ResponseEntity<?> kCertStep3Ajax(HttpServletRequest reqeust, HttpServletResponse repn, CertVO certVO) {
Map<String, String> returnData = new HashMap<String, String>();
com.barocert.kakaocert.identity.IdentityStatus status = null;
try {
status = kakaocertService.getIdentityStatus(KakaoClientCode, certVO.getReceiptID());
} catch (BarocertException e) {
returnData.put("result", "requestFail");
returnData.put("msg", "인증과정에 문제가 발생했습니다. 화면을 새로고침 후 다시 시도해 주세요.");
return new ResponseEntity<>(returnData, HttpStatus.OK);
}
if(status != null && status.getState() == 1) {
com.barocert.kakaocert.identity.IdentityResult result = null;
try {
result = kakaocertService.verifyIdentity(KakaoClientCode, certVO.getReceiptID());
} catch (BarocertException e) {
returnData.put("result", "requestFail");
returnData.put("msg", "인증과정에 문제가 발생했습니다. 화면을 새로고침 후 다시 시도해 주세요.");
return new ResponseEntity<>(returnData, HttpStatus.OK);
}
returnData.put("result", "success");
returnData.put("msg", "인증되었습니다.");
//세션 등록
FairnetUtils.setCertSession(reqeust, kDecrypt(result.getReceiverName()), kDecrypt(result.getReceiverHP()), "");
certVO.setPhone(kDecrypt(result.getReceiverHP()));
certVO.setName(kDecrypt(result.getReceiverName()));
String ori = "ReceiptID: " + result.getReceiptID()
+ ", State: " + result.getState()
// + ", SignedData: " + result.getSignedData()
+ ", Ci: " + kDecrypt(result.getCi())
+ ", ReceiverName: " + kDecrypt(result.getReceiverName())
+ ", ReceiverYear: " + kDecrypt(result.getReceiverYear())
+ ", ReceiverDay: " + kDecrypt(result.getReceiverDay())
+ ", ReceiverHP: " + kDecrypt(result.getReceiverHP())
+ ", ReceiverGender: " + kDecrypt(result.getReceiverGender());
certVO.setCertOri(ori);
certVO.setCertType("K");
try {
//인증 사용자 insert
certService.insertCert(certVO);
//인증 로그 insert
certService.insertCertLog(certVO);
} catch (Exception e) {
System.out.println("인증 정보 등록 실패!!!!!!!!!");
}
return new ResponseEntity<>(returnData, HttpStatus.OK);
}else {
returnData.put("result", "fail");
returnData.put("msg", "인증 후 다시 클릭해 주세요.");
return new ResponseEntity<>(returnData, HttpStatus.OK);
}
}
private String nDecrypt(String param){
try {
// 복호화 키
String secretKey = "0lOKtGZ_wu";
// 초기화 벡터
String iv = "6C2Syq8tbK3eApue";
// 암호문
String cipherText = SeedUtils.setReplaceNull(param);
nCertDecryptor decryptor = new nCertDecryptor();
String decryptedCI = decryptor.decrypt(secretKey, iv, cipherText);
return decryptedCI;
} catch (Exception e) {
System.out.println("복호화 실패!!!");
return param;
}
}
private String kDecrypt(String param) {
// 복호화 키
String secretKey = "+EJwVvo37PY1v4zcENdmGezYXwCdmtUlbaNVI0kvrFM=";
// 초기화 벡터
String iv = "uG+F70tIcBb3z1lh8RcVDQ==";
// 암호문
String cipherText = SeedUtils.setReplaceNull(param);
try {
// 복호화
kCertDecryptor decryptor = new kCertDecryptor();
String decryptedCI = decryptor.decrypt(secretKey, iv, cipherText);
System.out.println(decryptedCI);
return decryptedCI;
} catch (Exception e) {
e.printStackTrace();
System.out.println("복호화 실패!!!");
return param;
}
}
}