unit tests, and some cleaning up
This commit is contained in:
@ -2,7 +2,7 @@ module.exports = {
|
||||
version : '0.7.1',
|
||||
whitelist : (process.env.WHITELIST || "http://admin.localhost").split(','),
|
||||
secret : process.env.SECRET || "test",
|
||||
devToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjoidGVzdCBkYXRhIiwiYXVkIjoiaW50ZXJuYWwiLCJpc3MiOiJZYXJkc3RpY2sgU29mdHdhcmUiLCJzdWIiOiJCcmFpZCBKV1QifQ.t6LFXWPEVz3aLXwtrucarggqTkGY_2NnZB8ZTMaJ2oI',
|
||||
devToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7ImNsaWVudCI6InRlc3QiLCJjbGllbnRfdHlwZSI6InNpdGUiLCJ1c2VyX3R5cGUiOiJ1c2VyIiwidXNlcl9pZCI6MjAwLCJjaGFubmVsIjoidGVzdF9jaGFubmVsIn0sImF1ZCI6ImludGVybmFsIiwiaXNzIjoiWWFyZHN0aWNrIFNvZnR3YXJlIiwic3ViIjoiQnJhaWQgSldUIn0.5KNCov_EW1cycT4Ay0oSvk4Z4PHFedd3bWOyqkHHTBQ',
|
||||
port: process.env.PORT || 8443,
|
||||
hostname: process.env.HOSTNAME || 'ysbraid.localhost',
|
||||
environment: process.env.ENVIRONMENT || 'development',
|
||||
|
121
src/server.ts
121
src/server.ts
@ -29,67 +29,76 @@ application.use('', routes);
|
||||
let clientManager = new ClientManager();
|
||||
let channelManager = new ChannelManager();
|
||||
|
||||
wss.on('connection', (ws: WebSocket, request: object, args: string) => {
|
||||
var data = JSON.parse(args).data
|
||||
logger.accessLog.info(`Client Connected: ${data.user_id}`);
|
||||
function startServer() {
|
||||
wss.on('connection', (ws: WebSocket, request: object, args: string) => {
|
||||
var data = JSON.parse(args).data
|
||||
logger.accessLog.info(`Client Connected: ${data.user_id}`);
|
||||
|
||||
if (!channelManager.channelExists(data.channel)) {
|
||||
channelManager.createChannel(data);
|
||||
}
|
||||
if (!channelManager.channelExists(data.channel)) {
|
||||
channelManager.createChannel(data);
|
||||
}
|
||||
|
||||
if (clientManager.clientExists(data.user_id)) {
|
||||
var client: ClientBase|MHSClient|null = clientManager.getClient(data.user_id);
|
||||
if (clientManager.clientExists(data.user_id)) {
|
||||
var client: ClientBase|MHSClient|null = clientManager.getClient(data.user_id);
|
||||
|
||||
if (client != null) {
|
||||
client.replaceWebSocket(ws);
|
||||
}
|
||||
} else {
|
||||
var client: ClientBase|MHSClient|null = clientManager.addClient(data, ws);
|
||||
}
|
||||
|
||||
if (client != null) {
|
||||
client.replaceWebSocket(ws);
|
||||
channelManager.addClientToChannel(client, data.channel);
|
||||
}
|
||||
} else {
|
||||
var client: ClientBase|MHSClient|null = clientManager.addClient(data, ws);
|
||||
}
|
||||
|
||||
if (client != null) {
|
||||
channelManager.addClientToChannel(client, data.channel);
|
||||
}
|
||||
|
||||
ws.send('Hi there, welcome to braid, Measures Web Socket server.\nConnecting all our services!');
|
||||
});
|
||||
|
||||
server.on('upgrade', async function upgrade(request, socket, head) {
|
||||
let args: {};
|
||||
|
||||
try {
|
||||
args = await verifyConnection()
|
||||
} catch (e) {
|
||||
socket.destroy();
|
||||
logger.accessLog.info('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: string;
|
||||
|
||||
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);
|
||||
ws.send('Hi there, welcome to braid, Measures Web Socket server.\nConnecting all our services!');
|
||||
});
|
||||
});
|
||||
|
||||
server.listen(app.port, () => {
|
||||
console.log(`Braid v${app.version} is running!\n`);
|
||||
logger.accessLog.info(`Braid v${app.version} is running!\n`);
|
||||
});
|
||||
server.on('upgrade', async function upgrade(request, socket, head) {
|
||||
let args: {};
|
||||
|
||||
try {
|
||||
args = await verifyConnection()
|
||||
} catch (e) {
|
||||
socket.destroy();
|
||||
logger.accessLog.info('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: string;
|
||||
|
||||
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`);
|
||||
logger.accessLog.info(`Braid v${app.version} is running!\n`);
|
||||
});
|
||||
}
|
||||
|
||||
startServer();
|
||||
|
||||
module.exports = {
|
||||
clientManager: clientManager,
|
||||
channelManager: channelManager
|
||||
}
|
||||
|
@ -1,15 +1,15 @@
|
||||
import ChannelBase from '../channels/channelBase';
|
||||
import ClientBase from '../clients/clientBase';
|
||||
|
||||
var exec = require('child_process').exec;
|
||||
var expect = require('chai').expect;
|
||||
var sinon = require('sinon');
|
||||
var WebSocketClient = require('websocket').client;
|
||||
var app = require('../config/app');
|
||||
|
||||
var name: string = 'test channel';
|
||||
var channel: ChannelBase;
|
||||
var wsLink: string = `wss://${app.hostname}:${app.port}`;
|
||||
var wsClient = new WebSocketClient();
|
||||
var channel: ChannelBase;
|
||||
var data: any = { 'client': 'test', 'client_type':'site', 'user_id': 125, 'user_type': 'user', 'channel': name }
|
||||
var client: ClientBase = new ClientBase(data, wsClient);
|
||||
|
||||
@ -35,12 +35,7 @@ describe('ChannelBase', function () {
|
||||
expect(result).to.be.equal(true);
|
||||
});
|
||||
|
||||
it('should not broadcase a message to self', function () {
|
||||
// var wstClient = new WebSocketClient(wsLink);
|
||||
// var teacher_data: any = { 'client': 'test', 'client_type':'site', 'user_id': 126, 'user_type': 'teacher', 'channel': name }
|
||||
// var teacher: ClientBase = new ClientBase(teacher_data, wstClient);
|
||||
// channel.addClient(client);
|
||||
// channel.addClient(teacher);
|
||||
it('should not broadcast a message to self', function () {
|
||||
var result = channel.broadcastMessage(client, 'test message');
|
||||
expect(result.status).to.be.equal('success');
|
||||
});
|
||||
|
@ -55,9 +55,4 @@ describe('ClientManager', function () {
|
||||
var result = clientManager.getClientType(data, wsClient);
|
||||
expect(result.clientType()).to.be.equal('mhs');
|
||||
});
|
||||
|
||||
// it('should remove a client', function () {
|
||||
// clientManager.removeClient(data.user_id);
|
||||
// expect(clientManager.clients.length).to.be.equal(0);
|
||||
// });
|
||||
});
|
||||
|
Reference in New Issue
Block a user