UNPKG

rocket.chat.mqtt

Version:

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

63 lines (57 loc) 1.69 kB
import { ServiceBroker } from 'moleculer'; const metrics = process.env.METRICS || false; import * as MqttServer from './server'; import * as Routes from './Routes'; const port = process.env.REDIS_PORT || 6379; const host = process.env.REDIS_HOST || 'localhost'; const config = { port, host }; export const createService = ({ mq }) => new 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(); }