810deb907b
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
77 lines
2.3 KiB
JavaScript
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);
|