lisa-box
Version:
Home automation system L.I.S.A.
53 lines • 1.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const common_1 = require("@fabrix/fabrix/dist/common");
const _ = require('lodash');
const rooms = require('primus-rooms');
const emitter = require('primus-emitter');
class WebSocketService extends common_1.FabrixService {
_authorize(req, authorized) {
const token = req.query.token;
if (!token) {
return authorized(new Error('No auth token'));
}
const jwtConfig = this.app.config.passport.strategies.jwt;
const jwtOptions = _.clone(jwtConfig.tokenOptions);
jwtOptions.algorithms = jwtOptions.algorithm;
delete jwtOptions.algorithm;
const jwtVerifier = jwtConfig.strategy.JwtVerifier;
jwtVerifier(token, jwtConfig.options.secretOrKey, jwtOptions, (err, payload) => {
if (err) {
authorized(err);
}
else {
req.user = payload.user;
authorized();
}
});
}
init() {
this.app.sockets.use('rooms', rooms);
this.app.sockets.use('emitter', emitter);
this.app.sockets.authorize(this._authorize);
this.app.sockets.on('connection', spark => {
const user = spark.request.user;
spark.join('user_' + user.id);
spark.on('join', (socketRoom, fn) => {
spark.join(socketRoom, fn);
});
spark.on('leave', (room, fn) => {
spark.leave(room, fn);
});
spark.on('data', data => {
});
});
this.app.sockets.on('disconnection', spark => {
const user = spark.request.user;
if (user && spark && spark.leave) {
spark.leave('user_' + user.id);
}
});
}
}
exports.WebSocketService = WebSocketService;
//# sourceMappingURL=WebSocketService.js.map