package com.urpsys.basefront.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.egovframe.rte.fdl.property.EgovPropertyService;
import org.egovframe.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.urpsys.basefront.common.egov.util.EgovStringUtil;
import com.urpsys.basefront.common.util.CommonUtil;
import com.urpsys.basefront.common.util.ConvertUtils;
import com.urpsys.basefront.common.util.RestApiCallUtil;
import com.urpsys.basefront.domain.MemberVO;
import com.urpsys.basefront.domain.TokenInfo;
import com.urpsys.itmsfront.sys.domain.PrsnlPortletCreateVO;
import com.urpsys.itmsfront.sys.domain.PrsnlPortletManageVO;
import kong.unirest.HttpResponse;
import kong.unirest.JsonNode;
import kong.unirest.Unirest;
import kong.unirest.json.JSONObject;
import lombok.extern.slf4j.Slf4j;
/**
* 메인처리 Controller
* @author urp 인프라본부 나혁제
* @since 2025.01.03
* @version 1.0
* @see
*
*
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ---------- -------- ---------------------------
* 2025.01.03 나혁제 최초 생성
*
*
*
*/
@Slf4j
@Controller
public class MainController
{
@Value("${custom.auth_server}")
private String strAuthServer; // 인증서버
@Value("${custom.api_server}")
private String strApiServer; // Api Server
@Resource(name="RestApiCallUtil")
private RestApiCallUtil restApiCallUtil;
/** EgovPropertyService */
@Resource(name = "propertiesService")
protected EgovPropertyService propertyService;
// @Autowired
// HtmlEmailUtil htmlEmailUtil;
@Value("${custom.client}")
private String strClient; // 납품고객
@RequestMapping(value={ "/", "/main/actionMain.do"})
public String actionMain(HttpServletRequest request
, HttpServletResponse response
, ModelMap model)
{
log.info(">>>>>>>>>>>>>>> /main/actionMain.do <<<<<<<<<<<<<<<");
// htmlEmailUtil.send("sydongeun21@urp-ai.co.kr", "잘해봅시다1", "잘해봅시다1");
HttpSession session = request.getSession();
log.info("tokenInfo1 세션값 체크 =>"+request.getSession().getAttribute("tokenInfo"));
log.info("오류갑확인 =>"+request.getParameter("error"));
String strError = request.getParameter("error");
if(strError==null) strError ="";
// 세션체크
TokenInfo tokenInfo = (TokenInfo)request.getSession().getAttribute("tokenInfo");
log.info("tokenInfo=>{}", tokenInfo);
String strReturnJsp = "";
// 로그인 처리
if(tokenInfo == null )
{
log.info("여기서 확인해보자 =>"+strError);
String strErrorMsg = "";
if(!strError.equals(""))
{
String[] srError = strError.split(":");
log.info("srError1 =>"+srError[0]);
log.info("srError2 =>"+srError[1]);
// 에러메세지 생성
if(srError[0].equals("-1"))
{
strErrorMsg = "고객님의 아이디는 5회 로그인 오류로 인해 잠금처리 되었습니다. 시스템 관리자에게 연락해 주세요.";
}
else if(srError[0].equals("-2"))
{
strErrorMsg = "아이디 혹은 비밀번호을 확인해주세요. 5회 로그인 오류인경우 아이디가 잠금처리가 됩니다.";
}
else if(srError[0].equals("-3"))
{
strErrorMsg = "아이디 혹은 비밀번호을 확인해주세요. 5회 로그인 오류인경우 아이디가 잠금처리가 됩니다.";
}
else if(srError[0].equals("-4"))
{
strErrorMsg = "사용자 정보는 존재하나 권한정보가 존재하지 않습니다. 시스템 관리자에게 연락해 주세요.";
}
else
{
strErrorMsg = "";
}
}
model.addAttribute("strErrorMsg", strErrorMsg);
// 2025.12.04 한국투자공사 한국투자공사 로그인 화면 변경
if(strClient.equals("kic"))
{
strReturnJsp = "/main/LoginUsr_kic";
}
else
{
strReturnJsp = "/main/LoginUsr";
}
}
else
{
// 메인 페이지 이동
strReturnJsp = "forward:/main/mainPage.do";
}
log.info("<<<<<<<<<<<<<<< /main/actionMain.do >>>>>>>>>>>>>>>");
return strReturnJsp;
}
/**
* 일반(스프링 시큐리티) 로그인을 처리한다
* @param vo - 아이디, 비밀번호가 담긴 LoginVO
* @param request - 세션처리를 위한 HttpServletRequest
* @return result - 로그인결과(세션정보)
* @exception Exception
*/
@RequestMapping(value = "/main/actionSecurityLogin.do")
public String actionSecurityLogin( HttpServletRequest request
, HttpServletResponse response
, ModelMap model) throws Exception
{
log.info(">>>>>>>>>>>>>>> /main/actionSecurityLogin.do <<<<<<<<<<<<<<<");
String strId = (String)request.getParameter("userId");
String strPassWord = (String)request.getParameter("password");
log.info("strId =>{}" , strId);
log.info("strPassWord =>{}" , strPassWord);
String strAuthUrl = strAuthServer+"/oauth/token";
HttpResponse resAuth = Unirest.post(strAuthUrl)
.basicAuth("clientId", "secretKey")
.queryString("grant_type", "password")
.queryString("username", strId)
.queryString("password", strPassWord)
.asString();
String returnAuth = resAuth.getBody();
Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.IDENTITY).create(); // snakecase to camelcase
TokenInfo tokenInfo = gson.fromJson(returnAuth, TokenInfo.class);
String strReturnJsp = "";
// 오류 발생
if( (tokenInfo.getError_description() != null && !tokenInfo.getError_description().equals(""))
|| (tokenInfo.getError() != null && !tokenInfo.getError().equals(""))
)
{
strReturnJsp = "/main/LoginUsr";
}
// 정상로그인
else
{
strReturnJsp = "forward:/main/mainPage.do";
// timeout 설정
request.getSession().setMaxInactiveInterval(60*60);
// 세션처리1
request.getSession().setAttribute("tokenInfo", tokenInfo);
}
log.info("<<<<<<<<<<<<<<< /main/actionSecurityLogin.do >>>>>>>>>>>>>>>");
return strReturnJsp;
}
/**
* 템플릿 메인 페이지 조회
* @return 메인페이지 정보 Map [key : 항목명]
*
* @param request
* @param model
* @exception Exception Exception
*/
@RequestMapping(value = "/main/mainPage.do")
public String getMgtMainPage( HttpServletRequest request
, ModelMap model) throws Exception
{
log.info(">>>>>>>>>>>>>>> /main/mainPage.do <<<<<<<<<<<<<<<");
MemberVO memberVo = (MemberVO)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
PrsnlPortletCreateVO prsnlPortletCreateVO = new PrsnlPortletCreateVO();
prsnlPortletCreateVO.setUserId(memberVo == null ? "" : EgovStringUtil.isNullToString(memberVo.getTokenInfo().getStrMEM_ID()));
// Body Setting Start ---------------------------------
Map bodyMap = ConvertUtils.convertToMap(prsnlPortletCreateVO);
// Body Setting End ---------------------------------
Map returnMap = restApiCallUtil.RestApiCall( bodyMap, "/potl/mainPortletPage.do");
List