bigbluebutton-Github/bigbluebutton-html5/imports/api/pads/server/publishers.js
Pedro Beschorner Marin 810deb907b refactor(etherpad): access control et al.
Move all Etherpad's access control from Meteor to a separated [Node application](https://github.com/bigbluebutton/bbb-pads).
This new app uses [Etherpad's API](https://etherpad.org/doc/v1.8.4/#index_overview)
to create groups and manage session tokens for users to access them. Each group
represents one distinct pad at the html5 client.

- Removed locked users' access to pads: replaced readOnly pad's access with a new pad's content sharing routine
- Pad's access is now controlled by [Etherpad's API](https://etherpad.org/doc/v1.8.4/#index_overview)
- Closed captions edited content now reflects at it's live feedback
- Improved closed caption's dictation mode live feedback
- Moved all Etherpad's API control from Meteor to a separated [app](https://github.com/bigbluebutton/bbb-pads)
- Included access control both in akka-apps and bbb-pads
2022-01-21 16:56:01 -03:00

77 lines
2.3 KiB
JavaScript

import { Meteor } from 'meteor/meteor';
import Logger from '/imports/startup/server/logger';
import Pads, { PadsSessions, PadsUpdates } from '/imports/api/pads';
import AuthTokenValidation, { ValidationStates } from '/imports/api/auth-token-validation';
function pads() {
const tokenValidation = AuthTokenValidation.findOne({ connectionId: this.connection.id });
if (!tokenValidation || tokenValidation.validationStatus !== ValidationStates.VALIDATED) {
Logger.warn(`Publishing Pads was requested by unauth connection ${this.connection.id}`);
return Pads.find({ meetingId: '' });
}
const { meetingId, userId } = tokenValidation;
Logger.info(`Publishing Pads for ${meetingId} ${userId}`);
const options = {
fields: {
padId: 0,
},
};
return Pads.find({ meetingId }, options);
}
function padsSessions() {
const tokenValidation = AuthTokenValidation.findOne({ connectionId: this.connection.id });
if (!tokenValidation || tokenValidation.validationStatus !== ValidationStates.VALIDATED) {
Logger.warn(`Publishing PadsSessions was requested by unauth connection ${this.connection.id}`);
return PadsSessions.find({ meetingId: '' });
}
const { meetingId, userId } = tokenValidation;
Logger.info(`Publishing PadsSessions for ${meetingId} ${userId}`);
return PadsSessions.find({ meetingId, userId });
}
function padsUpdates() {
const tokenValidation = AuthTokenValidation.findOne({ connectionId: this.connection.id });
if (!tokenValidation || tokenValidation.validationStatus !== ValidationStates.VALIDATED) {
Logger.warn(`Publishing PadsUpdates was requested by unauth connection ${this.connection.id}`);
return PadsUpdates.find({ meetingId: '' });
}
const { meetingId, userId } = tokenValidation;
Logger.info(`Publishing PadsUpdates for ${meetingId} ${userId}`);
return PadsUpdates.find({ meetingId });
}
function publishPads(...args) {
const boundPads = pads.bind(this);
return boundPads(...args);
}
function publishPadsSessions(...args) {
const boundPadsSessions = padsSessions.bind(this);
return boundPadsSessions(...args);
}
function publishPadsUpdates(...args) {
const boundPadsUpdates = padsUpdates.bind(this);
return boundPadsUpdates(...args);
}
Meteor.publish('pads', publishPads);
Meteor.publish('pads-sessions', publishPadsSessions);
Meteor.publish('pads-updates', publishPadsUpdates);