-
Notifications
You must be signed in to change notification settings - Fork 1
/
app.js
85 lines (74 loc) · 2.58 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
const express = require('express');
const cookieParser = require('cookie-parser');
const jwt = require('jsonwebtoken');
const fs = require('fs');
const app = express();
const port = process.env.PORT || 15390;
const path = require('path');
const bodyParser= require('body-parser')
app.use(bodyParser.urlencoded({extended: true}))
app.use(cookieParser()); // cookie-parser 미들웨어 사용
app.use(express.json()); // JSON 파싱 미들웨어
app.get('/authenticate', (req, res) => {
res.sendFile(path.join(__dirname, 'public', 'auth.html'));
});
function sendFileIfExists(req, res, next) {
const file = req.params.file;
const filePath = path.join(__dirname, 'private', file);
// 파일이 존재하는지 확인
fs.access(filePath, fs.constants.F_OK, (err) => {
if (err) {
return res.status(404).send('File not found');
}
// 파일이 존재하면 제공
res.sendFile(filePath);
});
}
app.get('/', authenticateJWT, sendFileIfExists); //수정필요
app.get('/service', authenticateJWT, sendFileIfExists); //서비스모듈
app.get('/web/:file', authenticateJWT, sendFileIfExists);
app.get('/*', authenticateJWT, sendFileIfExists);
// authAPI: 사용자 인증
app.post('/authAPI', (req, res) => {
const Mykey = req.body;
if (Mykey.Mykey === 'password') {
// 사용자 정보
const user = {
username: 'User',
role: 'Viewer' // 사용자 역할
};
// JWT 생성
jwt.sign(user, JWT_SECRET, (err, token) => {
if (err) {
return res.status(500).json({ error: 'Failed to generate token' });
}
// 쿠키에 토큰 설정 (예: 만료일 설정 등은 필요에 따라 추가 가능)
res.cookie('token', token, { httpOnly: true }).sendStatus(200);
});
} else {
res.status(401).json({ error: Mykey });
}
});
// 미들웨어: JWT 검증
function authenticateJWT(req, res, next) {
const token = req.cookies.token;
// 토큰이 없는 경우
if (!token) {
// 요청한 경로가 /authenticate인 경우 다음 미들웨어로 진행
if (req.path === '/authenticate' || req.path === '/authAPI') {
return next();
}
return res.redirect('/authenticate');
}
jwt.verify(token, JWT_SECRET, (err, decoded) => {
if (err) {
// 토큰이 유효하지 않은 경우
return res.redirect('/authenticate');
}
req.user = decoded;
next();
});
}
app.listen(port, () => {
console.log('server started');
});