87 lines
3.6 KiB
JavaScript
Executable File
87 lines
3.6 KiB
JavaScript
Executable File
"use strict";
|
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
});
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
//external imports
|
|
const express = require("express");
|
|
const https = require("https");
|
|
const WebSocket = require("ws");
|
|
const fs = require("fs");
|
|
const jwt = require("jsonwebtoken");
|
|
const url = require("url");
|
|
//internal imports
|
|
var routes = require('./routes');
|
|
var app = require('./config/app');
|
|
var privateKey = fs.readFileSync('certs/key.pem', 'utf8');
|
|
var certificate = fs.readFileSync('certs/cert.pem', 'utf8');
|
|
var options = { key: privateKey, cert: certificate, hostname: app.hostname };
|
|
const application = express();
|
|
const server = https.createServer(options, application);
|
|
const wss = new WebSocket.Server({ noServer: true, maxPayload: 250000, host: app.hostname });
|
|
application.use(express.json());
|
|
application.use('', routes);
|
|
wss.on('connection', (ws, request, args) => {
|
|
console.log('client connected');
|
|
var data = JSON.parse(args).data;
|
|
var ClientManager = require('./clientManager');
|
|
let clientManager = new ClientManager(data, ws);
|
|
// ws.on('message', (message: string) => {
|
|
// console.log('received: %s', message);
|
|
// const broadcastRegex = /^broadcast\:/;
|
|
// if (broadcastRegex.test(message)) {
|
|
// message = message.replace(broadcastRegex, '');
|
|
// //send back the message to the other clients
|
|
// wss.clients
|
|
// .forEach(client => {
|
|
// if (client != ws) {
|
|
// client.send(`Hello, broadcast message -> ${message}`);
|
|
// }
|
|
// });
|
|
// } else {
|
|
// ws.send(`Hello, you sent -> ${message}`);
|
|
// }
|
|
// });
|
|
ws.send('Hi there, welcome to braid, Measures Web Socket server.\nConnecting all our services!');
|
|
});
|
|
server.on('upgrade', function upgrade(request, socket, head) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
let args;
|
|
try {
|
|
args = yield verifyConnection();
|
|
}
|
|
catch (e) {
|
|
socket.destroy();
|
|
console.log('connection terminated.');
|
|
return;
|
|
}
|
|
function verifyConnection() {
|
|
return new Promise((resolve, reject) => {
|
|
var data = url.parse(request.url, true).query;
|
|
var token = data["token"] || (app.environment == 'development' ? app.devToken : '');
|
|
var accepted = true;
|
|
var result;
|
|
jwt.verify(token, app.secret, app.signOptions, function (err, decoded) {
|
|
if (err) {
|
|
console.log(err);
|
|
accepted = false;
|
|
}
|
|
result = JSON.stringify(decoded);
|
|
accepted ? resolve(result) : reject('rejected');
|
|
});
|
|
});
|
|
}
|
|
wss.handleUpgrade(request, socket, head, function done(ws) {
|
|
wss.emit('connection', ws, request, args);
|
|
});
|
|
});
|
|
});
|
|
server.listen(app.port, () => {
|
|
console.log(`Braid v${app.version} is running!\n`);
|
|
});
|
|
//# sourceMappingURL=server.js.map
|