const express = require('express');
const router = express.Router();
const passport = require('passport');
const axios = require('axios');
const qs = require('qs');
const session = require('express-session');
const passportConfig = require('../passport');
const { CODE_SUCCESS } = require('../utils/constant');
const { encrypt } = require('../utils/cryption');
// 카카오 인증 설정
const clientID = 'clientID00192099';
const clientSecret = 'clientSecret1283920';
const callbackURL = 'http://localhost:8080/member/kakao/callback2';
let accessToken = null;
const uuidList = [];
// Express 세션 설정
router.use(session({
secret: 'your session secret',
resave: false,
saveUninitialized: true,
cookie: { secure: false }
}));
// 카카오 로그인
router.get('/kakao/login', passport.authenticate('kakao-login'));
// 카카오 로그인 콜백
router.get('/kakao/callback',
passport.authenticate('kakao-login', {
failureRedirect: 'http://localhost:8080/schedule/fail'
}),
(req, res) => {
accessToken = req.user.access_token;
res.json({
code: CODE_SUCCESS,
msg: '로그인 성공',
data: {
token: encrypt(req.user.access_token + '//' + req.user.user_email)
}
});
}
);
// 추가 동의 처리
router.get('/kakao/callback2', async (req, res) => {
const param = qs.stringify({
grant_type: 'authorization_code',
client_id: clientID,
code: req.query.code,
redirect_uri: callbackURL
});
const header = {
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
}
const result = await callAPI('POST', 'https://kauth.kakao.com/oauth/token', param, header);
console.log(result.data);
res.json({
code: CODE_SUCCESS,
msg: '추가 동의 완료',
data: result.data
});
});
// 카카오 친구 목록 가져오기
router.get('/kakao/friends', async (req, res) => {
const uri = 'https://kapi.kakao.com/v1/api/talk/friends';
const header = {
'Authorization': 'Bearer ' + accessToken
}
const result = await callAPI('GET', uri, null, header);
const friendsList = result.data.elements;
uuidList.length = 0; // 기존 UUID 초기화
friendsList.forEach(friend => {
uuidList.push(friend.uuid);
});
console.log('친구 UUID 목록:', uuidList);
res.json({
code: CODE_SUCCESS,
msg: '친구 목록 조회 성공',
data: uuidList
});
});
// 카카오톡 친구 메시지 전송
router.get('/kakao/friendsmsg', async (req, res) => {
const uri = 'https://kapi.kakao.com/v1/api/talk/friends/message/send';
const param = qs.stringify({
receiver_uuids: JSON.stringify(uuidList),
template_id: '68610',
template_args: '{"title":"캘린더 마감", "memo":"마감일자입니다.", "datetime":"2022-01-22, 09:30 ~ 18:30"}'
});
const header = {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Bearer ' + accessToken
}
const result = await callAPI('POST', uri, param, header);
console.log('메시지 전송 결과:', result.data);
res.json({
code: CODE_SUCCESS,
msg: '메시지 전송 성공',
data: result.data
});
});
// API 호출 공통 함수
async function callAPI(method, uri, param, header) {
try {
const response = await axios({
method: method,
url: uri,
headers: header,
data: param
});
return response;
} catch (err) {
console.error('API 호출 오류:', err);
return err.response;
}
}
passportConfig();
module.exports = router;