@@ -3,103 +3,67 @@ const path = require('path');
33const cookieParser = require ( 'cookie-parser' ) ;
44const logger = require ( 'morgan' ) ;
55const WebSocket = require ( 'ws' ) ;
6- const { terminalService } = require ( './services/terminal' ) ;
7- const adminService = require ( './services/admin' ) ;
8- const { validateToken } = require ( './middleware/auth' ) ;
9- const jwt = require ( 'jsonwebtoken' ) ;
10- const config = require ( './config' ) ;
11- const bodyParser = require ( 'body-parser' ) ;
6+ const http = require ( 'http' ) ;
127
138const indexRouter = require ( './routes/index' ) ;
14- const usersRouter = require ( './routes/users' ) ;
15- const terminalRouter = require ( './routes/terminal' ) ;
16- const adminRouter = require ( './routes/admin' ) ;
9+ const authService = require ( './services/auth' ) ;
10+ const { terminalService } = require ( './services/terminal' ) ;
1711
1812const app = express ( ) ;
1913
20- // view engine setup
14+ // 视图引擎设置
2115app . set ( 'views' , path . join ( __dirname , 'views' ) ) ;
2216app . set ( 'view engine' , 'ejs' ) ;
2317
24- // middleware setup
25- app . use ( logger ( config . logging . format ) ) ;
18+ // 中间件
19+ app . use ( logger ( 'dev' ) ) ;
2620app . use ( express . json ( ) ) ;
2721app . use ( express . urlencoded ( { extended : false } ) ) ;
2822app . use ( cookieParser ( ) ) ;
2923app . use ( express . static ( path . join ( __dirname , 'public' ) ) ) ;
30- app . use ( bodyParser . urlencoded ( { limit : "100mb" , extended : false } ) ) ;
31- app . use ( bodyParser . json ( { limit : "100mb" } ) ) ;
32- app . use ( bodyParser . text ( { limit : "100mb" } ) ) ;
33- app . use ( bodyParser . raw ( { limit : "100mb" } ) ) ;
3424
35- // Security headers
36- app . use ( ( req , res , next ) => {
37- res . set ( {
38- 'X-Content-Type-Options' : 'nosniff' ,
39- 'X-Frame-Options' : 'DENY' ,
40- 'X-XSS-Protection' : '1; mode=block'
41- } ) ;
42- next ( ) ;
43- } ) ;
25+ // 认证中间件
26+ app . use ( authService . validateToken . bind ( authService ) ) ;
4427
45- // Routes
28+ // 路由
4629app . use ( '/' , indexRouter ) ;
47- app . use ( '/users' , usersRouter ) ;
48- app . use ( '/terminal' , terminalRouter ) ;
49- app . use ( '/admin' , adminRouter ) ;
5030
51- // WebSocket server setup
52- const wss = new WebSocket . Server ( { noServer : true } ) ;
31+ // 错误处理
32+ app . use ( function ( err , req , res , next ) {
33+ console . error ( err . stack ) ;
34+ res . status ( err . status || 500 ) ;
35+ res . render ( 'error' , {
36+ message : err . message ,
37+ error : req . app . get ( 'env' ) === 'development' ? err : { }
38+ } ) ;
39+ } ) ;
40+
41+ // WebSocket服务器设置
42+ const server = http . createServer ( app ) ;
43+ const wss = new WebSocket . Server ( { server } ) ;
5344
54- // WebSocket authentication middleware
55- async function authenticateWebSocket ( request , socket , head ) {
45+ wss . on ( 'connection' , async ( ws , req ) => {
5646 try {
57- // 从URL参数中获取token
58- const url = new URL ( request . url , `http://${ request . headers . host } ` ) ;
47+ // 解析token
48+ const url = new URL ( req . url , `http://${ req . headers . host } ` ) ;
5949 const token = url . searchParams . get ( 'token' ) ;
6050
61- if ( ! token ) {
62- socket . write ( 'HTTP/1.1 401 Unauthorized\r\n\r\n' ) ;
63- socket . destroy ( ) ;
64- return ;
65- }
66-
67- // 验证token并解码用户信息
68- const decoded = jwt . verify ( token , config . jwt . secret ) ;
69- request . user = {
70- userid : decoded . userid ,
71- fingerprint : decoded . fingerprint
72- } ;
73-
74- // 升级连接
75- wss . handleUpgrade ( request , socket , head , ( ws ) => {
76- wss . emit ( 'connection' , ws , request ) ;
51+ // 验证token
52+ req . headers . authorization = `Bearer ${ token } ` ;
53+ await new Promise ( ( resolve , reject ) => {
54+ authService . validateToken (
55+ req ,
56+ { status : ( ) => ( { json : ( data ) => reject ( new Error ( data . error ) ) } ) } ,
57+ resolve
58+ ) ;
7759 } ) ;
78- } catch ( error ) {
79- console . error ( 'WebSocket authentication failed:' , error ) ;
80- socket . write ( 'HTTP/1.1 401 Unauthorized\r\n\r\n' ) ;
81- socket . destroy ( ) ;
82- }
83- }
8460
85- // Handle WebSocket connections
86- wss . on ( 'connection' , ( ws , request ) => {
87- try {
88- terminalService . handleConnection ( ws , request ) ;
61+ // 处理终端连接
62+ await terminalService . handleConnection ( ws , req ) ;
8963 } catch ( error ) {
90- console . error ( 'Failed to handle WebSocket connection :' , error ) ;
64+ console . error ( 'WebSocket连接错误 :' , error ) ;
9165 ws . close ( 1008 , 'Authentication failed' ) ;
9266 }
9367} ) ;
9468
95- // Error handler
96- app . use ( function ( err , req , res , next ) {
97- console . error ( err . stack ) ;
98- res . status ( err . status || 500 ) ;
99- res . render ( 'error' , {
100- message : err . message ,
101- error : req . app . get ( 'env' ) === 'development' ? err : { }
102- } ) ;
103- } ) ;
104-
105- module . exports = { app, authenticateWebSocket } ;
69+ module . exports = { app, server } ;
0 commit comments