UNPKG

rocket.chat.mqtt

Version:

It's a MQTT Server, using redis to scale horizontally.

77 lines (66 loc) 2.19 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.createService = undefined; var _moleculer = require('moleculer'); var _server = require('./server'); var MqttServer = _interopRequireWildcard(_server); var _Routes = require('./Routes'); var Routes = _interopRequireWildcard(_Routes); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } const metrics = process.env.METRICS || false; const port = process.env.REDIS_PORT || 6379; const host = process.env.REDIS_HOST || 'localhost'; const config = { port, host }; const createService = exports.createService = ({ mq }) => new _moleculer.ServiceBroker({ logLevel: 'info', sampleCount: 1, namespace: 'services', metrics, transporter: 'TCP', cacher: 'Memory', started(Services) { MqttServer.connect({ async authorizeSubscribe(client, sub, callback) { try { // const { topic } = sub; if (!(await Routes.Subscriptions.validate(client, sub, Services))) { throw 'not authorized'; } return callback(null, sub); } catch (error) { console.log(error); callback(error); } }, async authorizePublish() /* client, packet, callback*/{ return false; }, async authenticate(client, username, password, callback) { try { const user = await Services.call('authentication.login', { username, password: password.toString('utf8') }); if (user) { client.user = user; client.user._id = 'rocket.cat'; return callback(false, !!user); } // jwt.verify(username, JWT_SECRET, function (err, decoded) { // // console.log('decoded ->', decoded); // callback(err, !!client.user); // }); callback(true); } catch (error) { console.log(error); callback(error); } }, mq: mq || require('mqemitter-redis')(config), persistence: require('aedes-persistence-redis')(config) }); } }); if (require.main === module) { // standalone createService().start(); }