c7d5bd757e0b0cc35745a843b97ba53148fffd31
2 * @file Node entry and main driver
3 * @author Jordan Lavatai, Ken Grimes
6 * @copyright jk software 2017
7 * @summary HTTP(S) Router that uses the first directory in the requested URL
10 const fs
= require('fs')
11 const ws
= require('ws')
12 const http
= require('http')
13 const https
= require('https')
14 const getport
= require('get-port')
15 const mime
= require('mime')
16 const opts
= require('./opts.js')
18 /* const routeConnection = (request,response) => {
19 const htArgv = request.url.slice(1).split("?")
20 let routeName = /[^\/]*/.match(htArgv[0])[0]
22 routeName = opts['index']
23 if (routeName.indexOf('.') != -1) {
24 if (routeName in fileBuf) {
25 response.writeHead(200, { 'Content-Type': fileBuf[routeName].mime })
26 response.write(fileBuf[routeName].data)
29 if ('404.html' in fileBuf) {
30 response.writeHead(404, fileBuf['404.html'].mime)
31 response.write(fileBuf['404.html'].data)
34 response.writeHead(404)
38 else if (routeName in routes) {
39 const route = routes[routeName]
40 response.writeHead(200, { 'Content-Type': 'text/html' })
41 response.write(skelPage[0] + clientJS + skelPage[1])
43 route.socket.send(request.headers['x-forwarded-for'] || request.connection.remoteAddress)
46 routes[htArgv[0]] = true
48 newRoute.host = request.headers['x-forwarded-for'] || request.connection.remoteAddress
49 getport().then( (port) => {
51 newRoute.httpd = https.createServer(routerOpts, (request, response) => {
52 }).listen(newRoute.port)
54 newRoute.ws = new ws.Server( { server: newRoute.httpd } )
55 newRoute.ws.on('connection', (ws) => { console.log("socket connected"); newRoute.socket = ws; ws.send("CONNECTED") } )
56 newRoute.ws.on('message', (msg) => { console.log("Received message" + msg) })
57 console.log("Listening for websocket " + newRoute.host + " on port " + newRoute.port)
58 routes[htArgv[0]] = newRoute
60 response.writeHead(200, { 'Content-Type': 'text/html' })
61 response.write(skelPage[0] + 'const _strapp_port = \'' + newRoute.port + '\'\n' + hostJS + skelPage[1])
67 if (!opts['no-tls']) {
68 router.httpd = http.createServer(router.listener)
72 if (!fs
.existsSync(opts
['ca-key'])) {
73 console
.log(`ERR: Key ${opts['ca-key']} inaccessible (required for tls)`)
76 if (!fs
.existsSync(opts
['ca-cert'])) {
77 console
.log(`ERR: Cert ${opts['ca-cert']} inaccessible (required for tls)`)
81 key
: fs
.readFileSync(opts
['ca-key']),
82 cert
: fs
.readFileSync(opts
['ca-cert'])
86 const skelPage
= String(fs
.readFileSync('skel.html')).split("<!--STRAPP_SRC-->")
87 const clientJS
= fs
.readFileSync(opts
['client-js'])
88 const hostJS
= fs
.readFileSync(opts
['host-js'])
91 const router = https.createServer(routerOpts, (request, response) => {
92 const htArgv = request.url.slice(1).split("?")
93 let routeName = htArgv[0].split('/')[0]
95 routeName = 'index.html'
96 if (routeName.indexOf('.') != -1) {
97 if (routeName in fileBuf) {
98 response.writeHead(200, { 'Content-Type': fileBuf[routeName].mime })
99 response.write(fileBuf[routeName].data)
102 if ('404.html' in fileBuf) {
103 response.writeHead(404, fileBuf['404.html'].mime)
104 response.write(fileBuf['404.html'].data)
107 response.writeHead(404)
111 else if (routeName in routes) {
112 const route = routes[routeName]
113 response.writeHead(200, { 'Content-Type': 'text/html' })
114 response.write(skelPage[0] + clientJS + skelPage[1])
116 route.socket.send(request.headers['x-forwarded-for'] || request.connection.remoteAddress)
119 routes[htArgv[0]] = true
121 newRoute.host = request.headers['x-forwarded-for'] || request.connection.remoteAddress
122 getport().then( (port) => {
124 newRoute.httpd = https.createServer(routerOpts, (request, response) => {
125 }).listen(newRoute.port)
127 newRoute.ws = new ws.Server( { server: newRoute.httpd } )
128 newRoute.ws.on('connection', (ws) => { console.log("socket connected"); newRoute.socket = ws; ws.send("CONNECTED") } )
129 newRoute.ws.on('message', (msg) => { console.log("Received message" + msg) })
130 console.log("Listening for websocket " + newRoute.host + " on port " + newRoute.port)
131 routes[htArgv[0]] = newRoute
133 response.writeHead(200, { 'Content-Type': 'text/html' })
134 response.write(skelPage[0] + 'const _strapp_port = \'' + newRoute.port + '\'\n' + hostJS + skelPage[1])
138 }).listen(argv['port'])
140 //TODO: if ("electron" in process.versions) open a local renderwindow, and route to it