const crypto = require('crypto'); const oauthService = require('./oauthService'); const axios = require('axios'); // 1. 로그인 여부 검증 미들웨어 exports.isLoggedIn = async (req, res, next) => { if (req.session?.user || (req.isAuthenticated && req.isAuthenticated())) { return next(); } console.log('🚥 [oauthController] User not authenticated. Redirecting to login page.'); return res.redirect('/user/login?path=' + encodeURIComponent(req.originalUrl)); }; // 2. OAuth Callback 핸들러 (로컬 개발 환경에서는 직접 호출되지 않음) exports.handleCallback = async (req, res) => { const { code, state, next } = req.query; try { const { user } = await oauthService.exchangeToken(code, state, req.hostname); req.session.user = user; req.user = user; return res.redirect(next || "/"); } catch (err) { console.error("Token exchange error:", err); return res.status(500).send("토큰 처리 실패"); } }; // 3. 사용자 정보 역직렬화 (GSIM 연동 우회 및 가상 최고권한 권한 설정) exports.deserializeUser = async (req, res, next) => { if (req.session?.user) { req.user = { user_id: req.session.user.userId, user_nm: req.session.user.user_nm, group: req.session.user.group, company: '한맥기술', dept: '개발본부', position: '부장', permission: 1535, // master/dev급 세부 권한 비트플래그 bookmark: '' }; } next(); };