kcscDev/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/EgovLoginApiController.java

184 lines
6.7 KiB
Java

package com.dbnt.kcscbackend.auth;
import com.dbnt.kcscbackend.auth.entity.UserInfo;
import com.dbnt.kcscbackend.auth.service.EgovLoginService;
import com.dbnt.kcscbackend.config.common.BaseController;
import com.dbnt.kcscbackend.auth.entity.LoginVO;
import com.dbnt.kcscbackend.config.common.ResponseCode;
import com.dbnt.kcscbackend.config.common.ResultVO;
import com.dbnt.kcscbackend.config.egov.EgovMessageSource;
import com.dbnt.kcscbackend.config.jwt.EgovJwtTokenUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;
import org.springframework.ui.ModelMap;
import org.springframework.validation.Errors;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.HashMap;
import java.util.List;
/**
* 일반 로그인을 처리하는 컨트롤러 클래스
* @author 공통서비스 개발팀 박지욱
* @since 2009.03.06
* @version 1.0
* @see
*
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2009.03.06 박지욱 최초 생성
* 2011.08.31 JJY 경량환경 템플릿 커스터마이징버전 생성
*
* </pre>
*/
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/auth")
@Tag(name="EgovLoginApiController",description = "로그인 관련")
public class EgovLoginApiController extends BaseController {
/** EgovLoginService */
@Resource(name = "loginService")
private EgovLoginService loginService;
private final EgovJwtTokenUtil egovJwtTokenUtil;
/** EgovMessageSource */
@Resource(name = "egovMessageSource")
EgovMessageSource egovMessageSource;
/** JWT */
@Autowired
private EgovJwtTokenUtil jwtTokenUtil;
@Operation(
summary = "회원가입",
description = "회원가입",
tags = {"EgovLoginApiController"}
)
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "가입 성공"),
@ApiResponse(responseCode = "300", description = "가입 실패")
})
@PostMapping(value = "/join")
public HashMap<String, Object> actionJoin(@RequestBody @Valid LoginVO loginVO, Errors errors, HttpServletRequest request) throws Exception {
HashMap<String, Object> resultMap = new HashMap<String, Object>();
if(errors.hasErrors()){
StringBuilder msg = new StringBuilder();
for(FieldError error: errors.getFieldErrors()){
msg.append(error.getDefaultMessage());
msg.append("\n");
}
resultMap.put("resultCode", ResponseCode.INPUT_CHECK_ERROR.getCode());
resultMap.put("resultMessage", msg.toString());
}else if(!loginVO.getPassword().equals(loginVO.getPasswordChk())){
resultMap.put("resultCode", ResponseCode.SAVE_ERROR.getCode());
resultMap.put("resultMessage", "비밀번호 확인이 잘못 입력되었습니다.");
}else{
Integer insertResult = loginService.insertUser(loginVO);
if(insertResult!=null){
if(insertResult==-1){
resultMap.put("resultCode", ResponseCode.SAVE_ERROR.getCode());
resultMap.put("resultMessage", "사용중인 아이디입니다.");
}else if(insertResult==-2){
resultMap.put("resultCode", ResponseCode.SAVE_ERROR.getCode());
resultMap.put("resultMessage", "가입된 이메일입니다.");
}else{
resultMap.put("resultCode", ResponseCode.SUCCESS.getCode());
resultMap.put("resultMessage", "저장 되었습니다.");
}
}else{
resultMap.put("resultCode", ResponseCode.SAVE_ERROR.getCode());
resultMap.put("resultMessage", "저장에 실패하였습니다.");
}
}
return resultMap;
}
@Operation(
summary = "아이디 찾기",
description = "아이디 찾기",
tags = {"EgovLoginApiController"}
)
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "조회 성공"),
@ApiResponse(responseCode = "300", description = "조회 실패")
})
@PostMapping(value = "/findId")
public HashMap<String, Object> findId(@RequestBody LoginVO loginVO) throws Exception {
HashMap<String, Object> resultMap = new HashMap<String, Object>();
String userId = loginService.selectEmail(loginVO);
if(userId!=null){
userId = userId.substring(0, userId.length()-3)+"***";
resultMap.put("resultCode", ResponseCode.SUCCESS.getCode());
resultMap.put("resultMessage", "아이디는 "+userId+" 입니다.");
}else{
resultMap.put("resultCode", ResponseCode.SAVE_ERROR.getCode());
resultMap.put("resultMessage", "이메일 조회에 실패하였습니다.");
}
return resultMap;
}
@Operation(
summary = "비밀번호 찾기",
description = "비밀번호 찾기",
tags = {"EgovLoginApiController"}
)
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "조회 성공"),
@ApiResponse(responseCode = "300", description = "조회 실패")
})
@PostMapping(value = "/findPw")
public HashMap<String, Object> findPw(@RequestBody LoginVO loginVO) throws Exception {
HashMap<String, Object> resultMap = new HashMap<String, Object>();
String password = loginService.updateTempPassword(loginVO);
if(password!=null){
resultMap.put("resultCode", ResponseCode.SUCCESS.getCode());
resultMap.put("resultMessage", "비밀번호가 발급되었습니다.\n 새 비밀번호: "+password);
}else{
resultMap.put("resultCode", ResponseCode.SAVE_ERROR.getCode());
resultMap.put("resultMessage", "조회에 실패하였습니다.");
}
return resultMap;
}
@RequestMapping("/accessTokenRefresh")
public HashMap<String, Object> accessTokenRefresh(HttpServletRequest request, HttpServletResponse response, @AuthenticationPrincipal UserInfo loginVO){
HashMap<String, Object> resultMap = new HashMap<>();
String token = egovJwtTokenUtil.accessTokenRefresh(request.getHeader("Authorization"));
if(token!=null){
resultMap.put("resultCode", ResponseCode.SUCCESS.getCode());
resultMap.put("accessToken", token);
}else{
resultMap.put("resultCode", ResponseCode.AUTH_ERROR.getCode());
}
return resultMap;
}
@RequestMapping("/loginSuccess")
public HashMap<String, Object> loginSuccess(HttpServletRequest request, HttpServletResponse response){
return new HashMap<>();
}
}