X-Git-Url: https://git.kengrimes.com/?p=henge%2Fkiak.git;a=blobdiff_plain;f=main.js;h=6676ca921d72b24681296f894f9af1c52079a87a;hp=4ae47da46fcc9cc034ff440b8f01ab3794996dab;hb=de5fd179d4802a824a318c2df17939a03db3e04c;hpb=1c99c911f3941f23ceaa5f1b303e986f6de0dc7f diff --git a/main.js b/main.js index 4ae47da..6676ca9 100644 --- a/main.js +++ b/main.js @@ -1,58 +1,55 @@ -const electron = require('electron') -const app = electron.app -const url = require('url') -const WebSocket = require('ws') -const http = require('http') const fs = require('fs') +const ws = require('ws') +const https = require('https') +const http = require('http') +const getport = require('get-port') +const argv = require('minimist')(process.argv.slice(2)) -const routes = { - '/': function root(response) { - response.write(fs.readFileSync('host/host.html')) - response.end() - }, - '/admin.js': function js(response) { - response.write(fs.readFileSync('host/host.js')) - response.end() - }, - '/adapter.js': function adapter(response) { - response.write(fs.readFileSync('adapter.js')) - response.end() - }, - '/favicon.ico': function favicon(response) { - response.write('N/A') - response.end() - }, - '/streamlist': function streamlist(response) { - getDefaultStream() - } -} - -const rooms = {} - - -/* TODO: Swap out url.parse with regex? */ -function determineResponse(request) { - const clientIP = request.connection.remoteAddress - || request.socket.remoteAddress - || request.connection.socket.remoteAddress - || req.headers['x-forwarded-for'].split(',')[0] - const parsedURL = url.parse(request.url) - - /* Get the room name */ - const pathname = parsedURL.pathname - +const http_redirect = http.createServer((request, response) => { + response.writeHead(301, { "Location": "https://" + request.headers['host'] + request.url}) + response.end() +}).listen(2080) +const https_router_opts = { + key: fs.readFileSync('stunnel.key'), + cert: fs.readFileSync('stunnel.cert') } -app.on('ready', function() { - console.log('create server') - http.createServer(function(request, response) { +let https_routes = {} +const https_router = https.createServer(https_router_opts, (request, response) => { + let ht_argv = request.url.slice(1).split("?") + console.log(ht_argv) + if (ht_argv[0] in https_routes) { + response.writeHead(200, { 'Content-Type': 'text/plain' }) + response.write('You are a remote client\r\n') + let route = https_routes[ht_argv[0]] + response.write('You should connect to ' + route.host + "\r\nOn port: " + route.port + "\r\n") + response.end() + } + else if (ht_argv[0].indexOf(".") == -1) { + https_routes[ht_argv[0]] = 'true' + response.writeHead(200, { 'Content-Type': 'text/html' }) + let new_route = {} + new_route.host = request.headers['x-forwarded-for'] || request.connection.remoteAddress + getport().then( (port) => { + new_route.port = port + new_route.httpd = https.createServer(https_router_opts, (request, response) => { + }).listen(port) + new_route.ws = new ws.Server( { server: new_route.httpd } ) + new_route.ws.on('connection', (ws) => { console.log("socket connected"); ws.send("CONNECTED") } ) + new_route.ws.on('message', (msg) => { console.log("Received message" + msg) }) + console.log("Listening for websocket socket " + new_route.port + " on " + new_route.host) + console.log(new_route) + https_routes[ht_argv[0]] = new_route + }).then(() => { + let str = String(fs.readFileSync('remote-server.html')) + response.write(str.replace("$HOST",new_route.host.slice(7)).replace("$PORT",new_route.port)) + response.end() + }) + } +}).listen(2443) - let route = determineResponse(request) - console.log('routing to ' + route) - routes[route](response) - }).listen(5140); +if ("electron" in process.versions); -});