1+ var headerBlacklist = require ( "../header-blacklist.js" ) ;
2+ var config = require ( "../config.js" ) ;
3+ var tls = require ( 'tls' ) ;
4+ var net = require ( 'net' ) ;
5+
6+ function onUpgradeRequest ( clientRequest , clientSocket , clientHead ) {
7+ const options = {
8+ host : config . targetHost ,
9+ port : 443 ,
10+ servername : config . targetHost ,
11+ rejectUnauthorized : false
12+ } ;
13+
14+ const targetSocket = tls . connect ( options , ( ) => {
15+ clientSocket . setTimeout ( 0 ) ;
16+ targetSocket . setTimeout ( 0 ) ;
17+ clientSocket . setNoDelay ( true ) ;
18+ targetSocket . setNoDelay ( true ) ;
19+ let headers = `${ clientRequest . method } ${ clientRequest . url } HTTP/${ clientRequest . httpVersion } \r\n` ;
20+ for ( let i = 0 ; i < clientRequest . rawHeaders . length ; i += 2 ) {
21+ const key = clientRequest . rawHeaders [ i ] ;
22+ const value = clientRequest . rawHeaders [ i + 1 ] ;
23+ if ( headerBlacklist && headerBlacklist . includes ( key ) ) continue ;
24+ if ( key . toLowerCase ( ) === 'host' ) {
25+ headers += `Host: ${ config . targetHost } \r\n` ;
26+ } else if ( key . toLowerCase ( ) === 'origin' ) {
27+ headers += `Origin: https://${ config . targetHost } \r\n` ;
28+ } else {
29+ headers += `${ key } : ${ value } \r\n` ;
30+ }
31+ }
32+ headers += '\r\n' ;
33+
34+ targetSocket . write ( headers ) ;
35+ targetSocket . write ( clientHead ) ;
36+
37+ clientSocket . pipe ( targetSocket ) . pipe ( clientSocket ) ;
38+ } ) ;
39+
40+ targetSocket . on ( 'error' , ( err ) => {
41+ console . error ( 'Target Socket Error:' , err . message ) ;
42+ clientSocket . end ( ) ;
43+ } ) ;
44+
45+ clientSocket . on ( 'error' , ( err ) => {
46+ console . error ( 'Client Socket Error:' , err . message ) ;
47+ targetSocket . end ( ) ;
48+ } ) ;
49+
50+ targetSocket . on ( 'end' , ( ) => clientSocket . end ( ) ) ;
51+ clientSocket . on ( 'end' , ( ) => targetSocket . end ( ) ) ;
52+ }
53+
54+ module . exports = { onUpgradeRequest} ;
0 commit comments