
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.verify.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.LgnHstryVO;
import com.takensoft.cms.mber.vo.MberVO;
import com.takensoft.cms.token.service.RefreshTokenService;
import com.takensoft.cms.token.vo.RefreshTknVO;
import com.takensoft.common.message.MessageCode;
import com.takensoft.common.util.*;
import com.takensoft.common.verify.service.EmailService;
import com.takensoft.common.verify.vo.EmailVO;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
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.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* @author 하석형
* @since 2025.05.20
* @modification
* since | author | description
* 2025.05.20 | 하석형 | 최초 등록
*
* 이메일 관련 Controller
*/
@RestController
@RequiredArgsConstructor
@Slf4j
@RequestMapping(value="/sys/email")
public class EmailController {
private final EmailService emailService;
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 emailVO - 이메일 정보
* @return ResponseEntity - 이메일 인증코드 발송 응답 결과
*
* 이메일 인증코드 발송
*/
@PostMapping("/sendEmailVerifyCode.json")
public ResponseEntity<?> sendEmailVerifyCode(@RequestBody EmailVO emailVO) {
boolean result = emailService.sendEmailVerifyCode(emailVO);
return resUtil.successRes(result, MessageCode.EMAIL_SEND_SUCCESS);
}
/**
* @param emailVO - 이메일 정보
* @return ResponseEntity - 이메일 인증코드 확인 응답 결과
*
* 이메일 인증코드 확인
*/
@PostMapping("/checkEmailVerifyCode.json")
public ResponseEntity<?> checkEmailVerifyCode(@RequestBody EmailVO emailVO) {
boolean result = emailService.checkEmailVerifyCode(emailVO);
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
}
/**
* @param emailVO - 이메일 정보
* @return ResponseEntity - 이메일 인증코드 확인 응답 결과
*
* 2차 인증 이메일 인증코드 확인
*/
@PostMapping("/check2ndAuthEmailVerifyCode.json")
public void check2ndAuthEmailVerifyCode(@RequestBody EmailVO emailVO, HttpServletRequest req, HttpServletResponse res) throws IOException {
boolean authResult = emailService.checkEmailVerifyCode(emailVO); // 이메일 인증코드 확인
if(authResult) {
HashMap<String, Object> findMber = new HashMap<>();
findMber.put("mbrId", emailVO.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);
}
}