// /js/app-init.js // System 2 (신고 시스템) 앱 초기화 - SSO 인증 체크 (function() { 'use strict'; // ===== 리다이렉트 루프 방지 ===== var REDIRECT_KEY = '_sso_redirect_ts'; var REDIRECT_COOLDOWN = 5000; // 5초 내 재리다이렉트 방지 function safeRedirectToLogin() { var lastRedirect = parseInt(sessionStorage.getItem(REDIRECT_KEY) || '0', 10); var now = Date.now(); if (now - lastRedirect < REDIRECT_COOLDOWN) { console.warn('[System2] 리다이렉트 루프 감지 — 로그인 페이지로 이동하지 않음'); return; } sessionStorage.setItem(REDIRECT_KEY, String(now)); window.location.href = window.getLoginUrl ? window.getLoginUrl() : '/login'; } // ===== 인증 함수 (api-base.js의 전역 헬퍼 활용) ===== function isLoggedIn() { var token = window.getSSOToken ? window.getSSOToken() : localStorage.getItem('sso_token'); return token && token !== 'undefined' && token !== 'null'; } function getUser() { return window.getSSOUser ? window.getSSOUser() : (function() { var u = localStorage.getItem('sso_user'); return u ? JSON.parse(u) : null; })(); } function clearAuthData() { if (window.clearSSOAuth) { window.clearSSOAuth(); return; } localStorage.removeItem('sso_token'); localStorage.removeItem('sso_user'); } // ===== 메인 초기화 ===== async function init() { // 1. 인증 확인 if (!isLoggedIn()) { clearAuthData(); safeRedirectToLogin(); return; } var currentUser = getUser(); if (!currentUser || !currentUser.username) { clearAuthData(); safeRedirectToLogin(); return; } // 인증 성공 — 루프 카운터 리셋 + localStorage 백업 sessionStorage.removeItem(REDIRECT_KEY); var token = window.getSSOToken ? window.getSSOToken() : null; if (token && !localStorage.getItem('sso_token')) localStorage.setItem('sso_token', token); console.log('[System2] 인증 확인:', currentUser.username); } // DOMContentLoaded 시 실행 if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } // 전역 노출 window.appInit = { getUser: getUser, clearAuthData: clearAuthData, isLoggedIn: isLoggedIn }; })();