rocket.chat.mqtt
Version:
It's a MQTT Server, using redis to scale horizontally.
45 lines (37 loc) • 1.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Router = undefined;
var _routeParser = require('route-parser');
var _routeParser2 = _interopRequireDefault(_routeParser);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class Router {
constructor() {
this.routes = [];
}
add(path, cb) {
this.routes.push([new _routeParser2.default(path), cb]);
}
async validate(client, sub, models) {
const { routes } = this;
for (let index = 0; index < routes.length; index++) {
const [path, method] = routes[index];
const tmp = path.match(sub.topic);
if (tmp && (await method(client, sub, tmp, models))) {
return true;
}
}
return false;
}
}
exports.Router = Router;
const subscriptions = new Router();
subscriptions.add(':uid/subscriptions-changed', (client, sub, { uid }) => uid === client.user._id);
subscriptions.add(':uid/rooms-changed', (client, sub, { uid }) => uid === client.user._id);
subscriptions.add(':uid/notification', (client, sub, { uid }) => uid === client.user._id);
subscriptions.add('permissions-changed', client => !!client.user._id);
subscriptions.add(':rid/deleteMessage', (client, sub, { rid }) => !!client.subscriptions[`room-messages/${rid}`]);
subscriptions.add('room-messages/:rid', async ({ user }, sub, { rid }, Services) => Services.call('authorization.canAccessRoom', { rid, uid: user._id }));
subscriptions.add('$SYS/unsubscribe/:id', (uid, { id }) => uid === id);
exports.default = subscriptions;