<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ page import="com.ubintis.agt5.api.ApiDataService" %>
<%@ page import="com.ubintis.agt5.common.util.JsonUtil" %>
<%@ page import="com.ubintis.agt5.common.util.StrUtil" %>
<%@ page import="com.ubintis.agt5.framework.bean.AgentBean" %>
<%@ page import="com.ubintis.agt5.framework.config.AgentConfig" %>

<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.List" %>

<%
	String agent_id = "";
	String agent_domain = "";
	String server_id = "";
	String server_app_url = "";

	AgentBean agentBean = AgentConfig.getInstance().getAgentBean();
	
	if( agentBean != null ) {
		agent_id = agentBean.getAgent_id();
		agent_domain = agentBean.getAgent_domain();
		server_id = agentBean.getServer_id();
		server_app_url = agentBean.getServer_app_url();
	}
	
	String pni_token = StrUtil.NVL( session.getAttribute( "pni_token" ) );
	String user_data = StrUtil.NVL( session.getAttribute( "user_data" ) );
	
	String strAgentList = "";
	String loginPolicy = "";
	
	if( !"".equals( pni_token ) ){
		ApiDataService apiDataService = new ApiDataService();
		strAgentList = StrUtil.NVL( apiDataService.getAgentList() );
		loginPolicy = StrUtil.NVL( apiDataService.getLoginPolicy() );	
	}
%>

<!DOCTYPE html>
<html lang="ko">
<head>
<title>Pass-Ni SSO Agent Sample</title>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">

<link rel="icon" href="img/favicon.ico"  />
<link rel="stylesheet" href="css/default.css" />

<script type="text/javascript" src="js/jquery-3.6.3.min.js"></script>
<script type="text/javascript" src="js/countdown.js"></script>

<script type="text/javascript">

var agent_id = '<%=agent_id%>';
var server_id = '<%=server_id%>';
var sso_url = '<%=server_app_url%>';
var sso_login_url = sso_url + '/user/login/link';
var sso_logout_url = sso_url + '/user/logout';

var pni_token = '<%=pni_token%>';

$(function() {
	
	if( pni_token != '' ) {
		var policy = '<%=loginPolicy%>';
		
		if( policy != '' && policy != 'none' ) {
 			var objPolicy = JSON.parse( policy );
 			
 			var atmc_logout_yn = objPolicy.atmc_logout_yn;
 			var atmc_logout_time = objPolicy.atmc_logout_time;
 			var login_dup_yn = objPolicy.login_dup_yn;
 			
 			console.log(atmc_logout_yn + '-' + atmc_logout_time + '-' + login_dup_yn);
 			
 			if(atmc_logout_yn == 'Y') {
 				fnAutoLogout(atmc_logout_time);
 			}
 		}
		
		fnLoginCheck();
	}
	
});

function fnAutoLogout(atmc_logout_time) {
	
	$('#autologout').show();
		
	Countdown.start(atmc_logout_time, function() {
		alert( '일정시간(' + atmc_logout_time + '분)동안 이용이 없어 자동로그아웃 되었습니다.' );
		fnLogout();
	}, 'countdown');
}

function fnLoginCheck() {
	
	$.get('login_check.jsp', function(resdata) {
		
		if(resdata != '') {
			console.log('login_check : ' + resdata.code);
			
			if(resdata.code == 'SS0010') {
				alert( '로그아웃 되었습니다.' );
				fnLogout();
				
			} else if(resdata.code == 'SS0007') {
				alert( '[' + resdata.data + '] IP에서 접속하여 로그아웃 되었습니다.' );
				fnLogout();
			}
		}
		
	}, 'json' )
	.fail(function(e) {
	    alert('error:' + e);
	});
}

function fnLogin() {
	
	var agt_url = $(location).attr('protocol') + '//' + $(location).attr('host');
	document.loginForm.agt_url.value = agt_url;
	
	$('#loginForm').attr('action', sso_login_url).submit();
}

function fnLogout() {
	
	var agt_url = $(location).attr('protocol') + '//' + $(location).attr('host');
	document.logoutForm.agt_url.value = agt_url;
	
	$('#logoutForm').attr('action', sso_logout_url).submit();
}

function fnSSO(agt_id, sso_url) {
	
	$.get('sso_code.jsp', function(resdata) {
		
	    if(resdata.errorCode == '') {
	    	console.log('sso_code : ' + resdata.sso_code);
	    	
	    	$('#sso_code').val(resdata.sso_code);
	    	$('#ssoForm').attr('target', agt_id);
	    	$('#ssoForm').attr('action', sso_url);
	    	$('#ssoForm').submit();
	    	
	    	//window.open('about:blank').location.href = sso_url + '?sso_code=' + data.sso_code;
	    	
	    } else {
		    alert('error:' + resdata.errorCode);
	    }
	    
	}, 'json' )
	.fail(function(e) {
	    alert('error:' + e);
	});
}

function fnClientSSO(agt_id) {
	
	var req_data = '';
	req_data += 'server_id=' + server_id;
	req_data += '&agt_id=' + agent_id;
	req_data += '&target_agt_id=' + agt_id;
	
	$.ajax({
		url : 'https://127.0.0.1:49443/serverapi?method=sso',
		type : 'post',
		data : req_data,
		async : true,
		success : function(responseData) {
			console.log(responseData);
		}
	});
}

</script>

</head>

<body>

	<form name="loginForm" id="loginForm" method="post" action="">
		<input type="hidden" id="agt_id" name="agt_id" value="<%=agent_id%>" />
		<input type="hidden" id="agt_url" name="agt_url" value="" />
		<input type="hidden" id="add_param" name="add_param" value="add_param_value" />	<!-- 추가 파라미터가 있을 경우 -->
	</form>
	
	<form name="logoutForm" id="logoutForm" method="post" action="">
		<input type="hidden" id="agt_id" name="agt_id" value="<%=agent_id%>" />
		<input type="hidden" id="agt_url" name="agt_url" value="" />
		<input type="hidden" id="pni_token" name="pni_token" value="<%=pni_token%>" />
	</form>
	
	<form name="ssoForm" id="ssoForm" method="post" action="">
		<input type="hidden" id="sso_code" name="sso_code" value="" />
	</form>

	<div class="wrap">
		<h1>Pass-Ni SSO Agent 샘플 화면</h1>
	</div>
	
	<div class="bg-section">
		<div class="wrap">
			<div class="block1">
				<p><span class="tit">연동시스템 정보</span></p>
				<table>
					<tr>
						<td width="90px"><span class="subtit">Agent Info</span></td>
						<td width="*"><span class="cont">Domain : <%=agent_domain%>, ID : <%=agent_id%></span></td>
					</tr>
					<tr>
						<td><span class="subtit">Server URL</span></td>
						<td><span class="cont"><%=server_app_url%></span></td>
					</tr>
				</table>
				<p style="padding-top: 30px;"><span class="tit">사용자 정보</span></p>
				<table>
					<tr>
						<td width="90px"><span class="subtit">인증 토큰</span></td>
						<td width="*"><span class="cont"><%=pni_token%></span></td>
					</tr>
					<tr>
						<td><span class="subtit">사용자 정보</span></td>
						<td><span class="cont"><%=user_data%></span></td>
					</tr>
					<tr id="autologout" style="display:none;">
						<td><span class="subtit">자동 로그아웃</span></td>
						<td><span class="cont" id="countdown"></span></td>
					</tr>
				</table>
			</div>
		</div>
	</div>
	
	<div class="wrap">
	
		<%
			if( "".equals( pni_token ) || "".equals( user_data ) ) {
		%>
		
		<ul class="icon-bt">
			<li><a href="javascript:fnLogin();"><img src="img/bt-3.jpg" alt="통합 로그인" /></a></li>
			<li class="subtit"><a href="javascript:fnLogin();">통합 로그인</a></li>
			<li class="cont">( 통합 로그인 화면 호출 )</li>
		</ul>
		
		<%
			} else {
		%>
		
		<ul class="icon-bt">
			<li><a href="javascript:fnLogout();"><img src="img/bt-4.jpg" alt="통합 로그아웃" /></a></li>
			<li class="subtit"><a href="javascript:fnLogout();">통합 로그아웃</a></li>
			<li class="cont">( 통합 로그아웃 호출 )</li>
		</ul>
		
		<%
				if( !"none".equals( strAgentList ) && !"".equals( strAgentList ) ) {
					List<HashMap<String, Object>> agentList = JsonUtil.parseList( strAgentList );
					
					for( HashMap<String, Object> hm : agentList ) {
						String agtId = StrUtil.NVL( hm.get( "agt_id" ) );
						String agtNm = StrUtil.NVL( hm.get( "agt_nm" ) );
						String agtTy = StrUtil.NVL( hm.get( "agt_ty" ) );
						String ssoUrl = StrUtil.NVL( hm.get( "sso_url" ) );
						
						if( "CLIENT".equals( agtTy ) ) {
		%>
							<ul class="icon-bt">
								<li><a href="javascript:fnClientSSO('<%=agtId%>')"><img src="img/bt-1.jpg" alt="SSO 연동" /></a></li>
								<li class="subtit"><a href="javascript:fnClientSSO('<%=agtId%>')"><%=agtNm%> SSO 연동</a></li>
								<li class="cont">( <%=agtNm%>으로 SSO 연동 )</li>
							</ul>		
		<%
						} else {
		%>
							<ul class="icon-bt">
								<li><a href="javascript:fnSSO('<%=agtId%>', '<%=ssoUrl%>')"><img src="img/bt-1.jpg" alt="SSO 연동" /></a></li>
								<li class="subtit"><a href="javascript:fnSSO('<%=agtId%>', '<%=ssoUrl%>')"><%=agtNm%> SSO 연동</a></li>
								<li class="cont">( <%=agtNm%>으로 SSO 연동 )</li>
							</ul>
		<%
						}
					}
				}
			}
		%>
		
		<ul class="icon-bt">
			<li><a href="javascript:location.href='api_guide.jsp';"><img src="img/bt-2.jpg" alt="API 가이드" /></a></li>
			<li class="subtit"><a href="javascript:location.href='api_guide.jsp';">API 가이드</a></li>
			<li class="cont">( SSO Agent API 가이드 )</li>
		</ul>
		
	</div>
	
</body>
</html>
