-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 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","www.strapp.io").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);
-});