rocket.chat.mqtt
Version:
It's a MQTT Server, using redis to scale horizontally.
77 lines (66 loc) • 2.19 kB
JavaScript
;
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();
}