node-http-server – Diff between revs 35 and 36

Subversion Repositories:
Rev:
Only display areas with differencesIgnore whitespace
Rev 35 Rev 36
1 #!/usr/bin/env node 1 #!/usr/bin/env node
2   2  
3 /*************************************************************************/ 3 /*************************************************************************/
4 /* Copyright (C) 2017 Wizardry and Steamworks - License: GNU GPLv3 */ 4 /* Copyright (C) 2017 Wizardry and Steamworks - License: GNU GPLv3 */
5 /*************************************************************************/ 5 /*************************************************************************/
6   6  
7 // Import packages. 7 // Import packages.
8 const https = require('https'); 8 const https = require('https');
9 const http = require('http'); 9 const http = require('http');
10 const path = require('path'); 10 const path = require('path');
11 const fs = require('fs'); 11 const fs = require('fs');
12 const url = require('url'); 12 const url = require('url');
13 const moment = require('moment'); 13 const moment = require('moment');
14 const winston = require('winston'); 14 const winston = require('winston');
15 const yargs = require('yargs'); 15 const yargs = require('yargs');
16 const dns = require('dns'); 16 const dns = require('dns');
-   17 const HttpCache = require("http-cache");
17   18  
18 // Local imports. 19 // Local imports.
19 const Handler = require( 20 const Handler = require(
20 path 21 path
21 .resolve( 22 .resolve(
22 path.dirname(require.main.filename), 23 path.dirname(require.main.filename),
23 'src', 24 'src',
24 'handler' 25 'handler'
25 ) 26 )
26 ); 27 );
27 const certs = require( 28 const certs = require(
28 path 29 path
29 .resolve( 30 .resolve(
30 path.dirname(require.main.filename), 31 path.dirname(require.main.filename),
31 'src', 32 'src',
32 'certs' 33 'certs'
33 ) 34 )
34 ); 35 );
35   36  
36 // Load configuration file. 37 // Load configuration file.
37 const config = require( 38 const config = require(
38 path 39 path
39 .resolve( 40 .resolve(
40 path.dirname(require.main.filename), 41 path.dirname(require.main.filename),
41 'config' 42 'config'
42 ) 43 )
43 ); 44 );
44   45  
45 // Get command-line arguments. 46 // Get command-line arguments.
46 const argv = yargs 47 const argv = yargs
47 .version() 48 .version()
48 .option('root', { 49 .option('root', {
49 alias: 'd', 50 alias: 'd',
50 describe: 'Path to the document root', 51 describe: 'Path to the document root',
51 demandOption: true 52 demandOption: true
52 }) 53 })
53 .help() 54 .help()
54 .argv 55 .argv
55   56  
56 // Create various logging mechanisms. 57 // Create various logging mechanisms.
57 // RFC5424 - { emerg: 0, alert: 1, crit: 2, error: 3, warning: 4, notice: 5, info: 6, debug: 7 } 58 // RFC5424 - { emerg: 0, alert: 1, crit: 2, error: 3, warning: 4, notice: 5, info: 6, debug: 7 }
58 winston.setLevels(winston.config.syslog.levels); 59 winston.setLevels(winston.config.syslog.levels);
59 const log = new winston.Logger({ 60 const log = new winston.Logger({
60 transports: [ 61 transports: [
61 new winston.transports.File({ 62 new winston.transports.File({
62 level: 'info', 63 level: 'info',
63 filename: path.resolve( 64 filename: path.resolve(
64 path.dirname(require.main.filename), 65 path.dirname(require.main.filename),
65 config.log.file 66 config.log.file
66 ), 67 ),
67 handleExceptions: true, 68 handleExceptions: true,
68 json: false, 69 json: false,
69 maxsize: 1048576, // 1MiB. 70 maxsize: 1048576, // 1MiB.
70 maxFiles: 10, // Ten rotations. 71 maxFiles: 10, // Ten rotations.
71 colorize: false, 72 colorize: false,
72 timestamp: () => moment() 73 timestamp: () => moment()
73 .format('YYYYMMDDTHHmmss') 74 .format('YYYYMMDDTHHmmss')
74 }), 75 }),
75 new winston.transports.Console({ 76 new winston.transports.Console({
76 level: 'info', 77 level: 'info',
77 handleExceptions: true, 78 handleExceptions: true,
78 json: false, 79 json: false,
79 colorize: true, 80 colorize: true,
80 timestamp: () => moment() 81 timestamp: () => moment()
81 .format('YYYYMMDDTHHmmss') 82 .format('YYYYMMDDTHHmmss')
82 }) 83 })
83 ], 84 ],
84 exitOnError: false 85 exitOnError: false
85 }); 86 });
86   87  
87 fs.realpath(argv.root, (error, root) => { 88 fs.realpath(argv.root, (error, root) => {
88 if (error) { 89 if (error) {
89 log.error('Could not find document root: ' + argv.root); 90 log.error('Could not find document root: ' + argv.root);
90 process.exit(1); 91 process.exit(1);
91 } 92 }
-   93  
-   94 // Create server-side cache.
-   95 const httpcache = new HttpCache();
92   96  
93 // Start HTTP server. 97 // Start HTTP server.
94 http.createServer( 98 http.createServer(
95 // authentication, 99 // authentication,
96 (request, response) => 100 (request, response) =>
-   101 httpcache(request, response, () => {
97 new Handler().process(config, request, response, root) 102 new Handler().process(config, request, response, root)
98 .on('log', (data) => { 103 .on('log', (data) => {
99 log.log(data.severity, data.message); 104 log.log(data.severity, data.message);
100 }) 105 })
101 .on('data', (result) => { 106 .on('data', (result) => {
102 response.setHeader('Content-Type', result.type); 107 response.setHeader('Content-Type', result.type);
103 response.writeHead(result.status); 108 response.writeHead(result.status);
104 result.data 109 result.data
105 .on('readable', () => result.data.pipe(response)) 110 .on('readable', () => result.data.pipe(response))
106 .on('end', () => response.end()); 111 .on('end', () => response.end());
-   112 });
107 }) 113 })
108 ).listen(config.net.port, config.net.address, () => { 114 ).listen(config.net.port, config.net.address, () => {
109 log.info('HTTP Server accessible at: http://' + 115 log.info('HTTP Server accessible at: http://' +
110 config.net.address + 116 config.net.address +
111 ':' + 117 ':' +
112 config.net.port + 118 config.net.port +
113 ' and serving files from directory: ' + 119 ' and serving files from directory: ' +
114 root 120 root
115 ); 121 );
116 }); 122 });
117   123  
118 // Start HTTPs server if enabled. 124 // Start HTTPs server if enabled.
119 if (config.ssl.enable) { 125 if (config.ssl.enable) {
120 // Generate certificates for HTTPs. 126 // Generate certificates for HTTPs.
121 certs.generate( 127 certs.generate(
122 config.site.name, 128 config.site.name,
123 config.net.address, 129 config.net.address,
124 config.ssl.privateKeySize, 130 config.ssl.privateKeySize,
125 (certificates) => { 131 (certificates) => {
126 https.createServer( 132 https.createServer(
127 // authentication, 133 // authentication,
128 { 134 {
129 key: certificates.privateKey, 135 key: certificates.privateKey,
130 cert: certificates.certificate, 136 cert: certificates.certificate,
131 }, 137 },
132 (request, response) => 138 (request, response) =>
133 new Handler().process(config, request, response, root) 139 new Handler().process(config, request, response, root)
134 .on('log', (data) => { 140 .on('log', (data) => {
135 log.log(data.severity, data.message); 141 log.log(data.severity, data.message);
136 }) 142 })
137 .on('data', (result) => { 143 .on('data', (result) => {
138 response.setHeader('Content-Type', result.type); 144 response.setHeader('Content-Type', result.type);
139 response.writeHead(result.status); 145 response.writeHead(result.status);
140 result.data 146 result.data
141 .on('readable', () => result.data.pipe(response)) 147 .on('readable', () => result.data.pipe(response))
142 .on('end', () => response.end()); 148 .on('end', () => response.end());
143 }) 149 })
144 ).listen(config.ssl.port, config.ssl.address, () => { 150 ).listen(config.ssl.port, config.ssl.address, () => {
145 log.info('HTTPs Server accessible at: https://' + 151 log.info('HTTPs Server accessible at: https://' +
146 config.ssl.address + 152 config.ssl.address +
147 ':' + 153 ':' +
148 config.ssl.port + 154 config.ssl.port +
149 ' and serving files from directory: ' + 155 ' and serving files from directory: ' +
150 root 156 root
151 ); 157 );
152 }) 158 })
153 } 159 }
154 ); 160 );
155 } 161 }
156 }); 162 });
157   163  
158   164  
159
Generated by GNU Enscript 1.6.5.90.
165
Generated by GNU Enscript 1.6.5.90.
160   166  
161   167  
162   168