
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
package com.takensoft.common.certify.web;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.takensoft.cms.loginPolicy.service.LoginModeService;
import com.takensoft.cms.loginPolicy.service.LoginPolicyService;
import com.takensoft.cms.mber.service.LgnHstryService;
import com.takensoft.cms.mber.service.MberService;
import com.takensoft.cms.mber.vo.MberVO;
import com.takensoft.cms.token.service.RefreshTokenService;
import com.takensoft.common.message.MessageCode;
import com.takensoft.common.util.*;
import com.takensoft.common.certify.service.SMSService;
import com.takensoft.common.certify.vo.SMSVO;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* @author 하석형
* @since 2025.05.20
* @modification
* since | author | description
* 2025.05.20 | 하석형 | 최초 등록
*
* SMS 관련 Controller
*/
@RestController
@RequiredArgsConstructor
@Slf4j
@RequestMapping(value="/sys/sms")
public class SMSController {
private final SMSService smsService;
private final ResponseUtil resUtil;
private final MberService mberService;
private final HttpRequestUtil httpRequestUtil;
private final LgnHstryService lgnHstryService;
private final LoginModeService loginModeService;
private final RefreshTokenService refreshTokenService;
private final LoginPolicyService loginPolicyService;
private final JWTUtil jwtUtil;
private final SessionUtil sessionUtil;
private final RedisTemplate<String, String> redisTemplate;
private final LoginUtil loginUtil;
@Value("${jwt.accessTime}")
private long JWT_ACCESSTIME;
@Value("${jwt.refreshTime}")
private long JWT_REFRESHTIME;
@Value("${cookie.time}")
private int COOKIE_TIME; // 쿠키 유지 시간
/**
* @param smsVO - SMS 정보
* @return ResponseEntity - SMS 인증코드 발송 응답 결과
*
* SMS 인증코드 발송
*/
@PostMapping("/sendSMSCertifyCode.json")
public ResponseEntity<?> sendSMSCertifyCode(@RequestBody SMSVO smsVO) {
boolean result = smsService.sendSMSCertifyCode(smsVO);
return resUtil.successRes(result, MessageCode.CERTIFY_CODE_SEND_SUCCESS);
}
/**
* @param smsVO - SMS 정보
* @return ResponseEntity - SMS 인증코드 확인 응답 결과
*
* SMS 인증코드 확인
*/
@PostMapping("/checkSMSCertifyCode.json")
public ResponseEntity<?> checkSMSCertifyCode(@RequestBody SMSVO smsVO) {
boolean result = smsService.checkSMSCertifyCode(smsVO);
return resUtil.successRes(result, MessageCode.CERTIFY_SUCCESS);
}
/**
* @param smsVO - SMS 정보
* @return ResponseEntity - SMS 인증코드 확인 응답 결과
*
* 2차 인증 SMS 인증코드 확인
*/
@PostMapping("/check2ndAuthSMSCertifyCode.json")
public void check2ndAuthSMSCertifyCode(@RequestBody SMSVO smsVO, HttpServletRequest req, HttpServletResponse res) throws IOException {
boolean authResult = smsService.checkSMSCertifyCode(smsVO); // SMS 인증코드 확인
if(authResult) {
HashMap<String, Object> findMber = new HashMap<>();
findMber.put("mbrId", smsVO.getMbrId());
MberVO mber = mberService.findByMbr(findMber);
loginUtil.successLogin(mber, req, res);
} else {
// 인증 실패 시 예외 처리
Map<String, Object> result = new HashMap<>();
res.setContentType("application/json;charset=UTF-8");
res.setStatus(HttpStatus.UNAUTHORIZED.value());
result.put("message", "인증에 실패했습니다. 올바른 인증코드를 입력해주세요.");
new ObjectMapper().writeValue(res.getOutputStream(), result);
return;
}
// return resUtil.successRes(authResult, MessageCode.COMMON_SUCCESS);
}
}