diff --git a/source/app.js b/source/app.js index 632fd35..b1bfbc2 100644 --- a/source/app.js +++ b/source/app.js @@ -9,6 +9,7 @@ const config = require(config_path) const express = require('express') const logger = require('./lib/logger') const routes = require(routes_path) +const helmet = require('helmet') // loggers const logger_init = new logger(init_log_path) @@ -16,6 +17,8 @@ const logger_runtime = new logger(runtime_log_path) const app = express() +app.use(helmet()) + // logger app.use(function(req, res, next) { var {url} = req diff --git a/source/coordinator/controller/session.js b/source/coordinator/controller/session.js index a611697..9ae8d24 100644 --- a/source/coordinator/controller/session.js +++ b/source/coordinator/controller/session.js @@ -33,6 +33,7 @@ module.exports.create_session = async (req, res, next) => { throw new Error('session limit reached') var session_id = crypto.randomBytes(16).toString('hex') + // create session on session server http_client.get({ @@ -59,7 +60,8 @@ module.exports.create_session = async (req, res, next) => { connection_link:answer.link, connection_code:code }) - res.json({msg:'SESSION_CREATED', link:answer.link}) + // SHALL REMOVE CONNECTION CODE BECAUSE IN WEB WE DO NOT NEED IT + res.json({msg:'SESSION_CREATED', link:answer.link, connection_code:code}) }, function(err) { next(Error('session server not working')) }) @@ -69,7 +71,15 @@ module.exports.create_session = async (req, res, next) => { } module.exports.connect_session = async (req, res, next) => { - + try { + const db = await db_connection.get_db() + var session = await db.collection('session_active').findOne({connection_code:parseInt(req.query.connection_code)}) + if (!session) + throw new Error('sessions not found') + res.json({connection_link:session.connection_link}) + } catch (e) { + next (e) + } } module.exports.close_session = async (req, res, next) => { diff --git a/source/coordinator/controller/session_server.js b/source/coordinator/controller/session_server.js new file mode 100644 index 0000000..7dd1ec5 --- /dev/null +++ b/source/coordinator/controller/session_server.js @@ -0,0 +1,10 @@ +const db_connection = require('../database/connection.js') +const crypto = require('crypto') + +module.exports.emergency_shutdown = async (req, res, next) => { + const db = await db_connection.get_db() + var id = crypto.createHash('md5').update(req.query.ip+req.query.port).digest('hex') + var query = {server_id:{$in:[id]}} + await db.collection('session_active').deleteMany(query) + res.json({msg:'SESSIONS_CLOSED'}) +} \ No newline at end of file diff --git a/source/coordinator/routes/index.js b/source/coordinator/routes/index.js index f94fe90..9de2de1 100644 --- a/source/coordinator/routes/index.js +++ b/source/coordinator/routes/index.js @@ -1,8 +1,10 @@ const router = require('express').Router() const router_title = require('./title') const router_session = require('./session') +const router_session_server = require('./session_server') router.use('/title', router_title) router.use('/session', router_session) +router.use('/session_server', router_session_server) module.exports = router \ No newline at end of file diff --git a/source/coordinator/routes/session_server.js b/source/coordinator/routes/session_server.js new file mode 100644 index 0000000..326eebb --- /dev/null +++ b/source/coordinator/routes/session_server.js @@ -0,0 +1,7 @@ +const router = require('express').Router() + +const {emergency_shutdown} = require('../controller/session_server') + +router.get('/emergency_shutdown', emergency_shutdown) + +module.exports = router \ No newline at end of file diff --git a/source/package-lock.json b/source/package-lock.json index 5e646fb..e8979a1 100644 --- a/source/package-lock.json +++ b/source/package-lock.json @@ -12,6 +12,7 @@ "cors": "^2.8.5", "experss": "^0.0.1-security", "express": "^4.18.2", + "helmet": "^6.0.1", "mongodb": "^4.12.0", "mongoose": "^6.8.0", "node-datetime": "^2.1.2", @@ -1508,6 +1509,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/helmet": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-6.0.1.tgz", + "integrity": "sha512-8wo+VdQhTMVBMCITYZaGTbE4lvlthelPYSvoyNvk4RECTmrVjMerp9RfUOQXZWLvCcAn1pKj7ZRxK4lI9Alrcw==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -3450,6 +3459,11 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, + "helmet": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-6.0.1.tgz", + "integrity": "sha512-8wo+VdQhTMVBMCITYZaGTbE4lvlthelPYSvoyNvk4RECTmrVjMerp9RfUOQXZWLvCcAn1pKj7ZRxK4lI9Alrcw==" + }, "http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", diff --git a/source/package.json b/source/package.json index d5879d8..e050298 100644 --- a/source/package.json +++ b/source/package.json @@ -14,6 +14,7 @@ "cors": "^2.8.5", "experss": "^0.0.1-security", "express": "^4.18.2", + "helmet": "^6.0.1", "mongodb": "^4.12.0", "mongoose": "^6.8.0", "node-datetime": "^2.1.2", diff --git a/source/session_server/config.json b/source/session_server/config.json index a7c7edc..d96da40 100644 --- a/source/session_server/config.json +++ b/source/session_server/config.json @@ -1,6 +1,8 @@ { - "ip" : "127.0.0.1", + "ip" : "192.168.1.115", "port" : 3002, + "external_ip" : "192.168.1.115", + "external_port" : 3002, "session_ports":{ "count": 50, "app_begin": 47000, diff --git a/source/session_server/controller/session.js b/source/session_server/controller/session.js index 6e86cc6..13ed8bd 100644 --- a/source/session_server/controller/session.js +++ b/source/session_server/controller/session.js @@ -1,36 +1,24 @@ -// two bad headers -// const http_client = require('../../lib/http_client.js') -// const crypto = require('crypto') - - -// // filesystem -// const fs = require('fs') - -// // node date time -// const node_time = require('node-datetime') -// // titles for process creation -// const titles = require('./titles.json') - const port_alloc = require('../../lib/port_alloc.js') const titles = require('../titles.json') -const configg = require('../config.json') +const config = require('../config.json') const { spawn } = require('node:child_process') const child_process = require('child_process') const http_client = require('../../lib/http_client.js') -const app_port_begin = configg.session_ports.app_begin -const http_port_begin = configg.session_ports.http_begin -const ports_count = configg.session_ports.count +const app_port_begin = config.session_ports.app_begin +const http_port_begin = config.session_ports.http_begin +const ports_count = config.session_ports.count -const app_args_static = configg.app_args_static -const app_args_ip = configg.app_args_runtime.ip -const server_ip = configg.ip -const app_args_port = configg.app_args_runtime.port +const app_args_static = config.app_args_static +const app_args_ip = config.app_args_runtime.ip +const server_ip = config.external_ip +const server_port = config.external_port +const app_args_port = config.app_args_runtime.port -const webrtc_cirrus_path = configg.webrtc_args_static.cirrus_path +const webrtc_cirrus_path = config.webrtc_args_static.cirrus_path -const coordinator_port = configg.coordinator.port -const coordinator_ip = configg.coordinator.ip +const coordinator_port = config.coordinator.port +const coordinator_ip = config.coordinator.ip // const http_client = require('../lib/http_client.js') @@ -38,6 +26,16 @@ const coordinator_ip = configg.coordinator.ip var app_port_alloc = new port_alloc(app_port_begin, ports_count) var http_port_alloc = new port_alloc(http_port_begin, ports_count) +// close all own sessions on session server if emergency shutdown +http_client.get({ + host: coordinator_ip, + port: coordinator_port, + path: `/session_server/emergency_shutdown?ip=${server_ip}&port=${server_port}` +}, async function(answer) { +}, function(err) { + //next(Error('session server not working')) +}) + module.exports.create_session = async (req, res, next) => { //create?title=name&next_var=0 try { @@ -95,37 +93,15 @@ module.exports.create_session = async (req, res, next) => { }, function(err) { next(Error('session server not working')) }) - // new http_client(coordinator_ip, coordinator_port).post( - // JSON.stringify({verb:'CLOSE_SESSION', session_id:req.query.session_id}), function(answer) { - - // }, - // function(error) { - - // }) }) res.json({msg:'SESSION_CREATED', link:`http://${server_ip+':'+http_port}`}) - // callback(response) - // return - - // get request - // http_client.get({ - // host: free_server.ip, - // port: free_server.port, - // path: `/session/create?title=${req.query.title}&session_id=${session_id}` - // }, async function(answer) { - - // res.json({msg:'SESSION_CREATED', link:answer.link}) - // }, function(err) { - // next(Error('session server not working')) - // }) } catch (e) { next(e) } } module.exports.connect_session = async (req, res, next) => { - } module.exports.close_session = async (req, res, next) => { diff --git a/source/session_server/titles.json b/source/session_server/titles.json index a78cd85..bf641be 100644 --- a/source/session_server/titles.json +++ b/source/session_server/titles.json @@ -1,10 +1,10 @@ [ { - "title":"Fortis", + "title":"mosharov", "path":"D:/shared/Builds/Fortis_UnStable_64/WindowsNoEditor/FORTIS_Taktika.exe" }, { - "title":"Ivazowsky", + "title":"ivazowsky", "path":"D:/shared/Builds/Ivaz_Optimized_2/Ivazowsky.exe" } ] \ No newline at end of file