diff --git a/bigbluebutton-html5/imports/api/annotations/server/methods/clearWhiteboard.js b/bigbluebutton-html5/imports/api/annotations/server/methods/clearWhiteboard.js index 25de55fe320e2f982333b3d0fe876a1a0681cb76..5c146c7c8e7a0584916a0bdd33892ea0cacff3ca 100644 --- a/bigbluebutton-html5/imports/api/annotations/server/methods/clearWhiteboard.js +++ b/bigbluebutton-html5/imports/api/annotations/server/methods/clearWhiteboard.js @@ -1,28 +1,17 @@ -import { getMultiUserStatus } from '/imports/api/common/server/helpers'; import RedisPubSub from '/imports/startup/server/redis'; import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -import isPodPresenter from '/imports/api/presentation-pods/server/utils/isPodPresenter'; - -export default function clearWhiteboard(credentials, whiteboardId) { +export default function clearWhiteboard(whiteboardId) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'ClearWhiteboardPubMsg'; - const { meetingId, requesterUserId, requesterToken } = credentials; + const { meetingId, requesterUserId } = extractCredentials(this.userId); - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); check(whiteboardId, String); - const allowed = isPodPresenter(meetingId, whiteboardId, requesterUserId) - || getMultiUserStatus(meetingId, whiteboardId); - if (!allowed) { - throw new Meteor.Error('not-allowed', `User ${requesterUserId} is not allowed to clear the whiteboard`); - } - const payload = { whiteboardId, }; diff --git a/bigbluebutton-html5/imports/api/annotations/server/methods/sendAnnotation.js b/bigbluebutton-html5/imports/api/annotations/server/methods/sendAnnotation.js index 9700c6415f4b876ba8afcd5fae72f8d8d0e0213d..daa01d8f2410f4f8d5d6d2d94f3f122d86e99257 100755 --- a/bigbluebutton-html5/imports/api/annotations/server/methods/sendAnnotation.js +++ b/bigbluebutton-html5/imports/api/annotations/server/methods/sendAnnotation.js @@ -1,105 +1,8 @@ -import { getMultiUserStatus } from '/imports/api/common/server/helpers'; -import RedisPubSub from '/imports/startup/server/redis'; -import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; -import Annotations from '/imports/api/annotations'; +import sendAnnotationHelper from './sendAnnotationHelper'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -import isPodPresenter from '/imports/api/presentation-pods/server/utils/isPodPresenter'; +export default function sendAnnotation(annotation) { + const { meetingId, requesterUserId } = extractCredentials(this.userId); -function isLastMessage(meetingId, annotation, userId) { - const DRAW_END = Meteor.settings.public.whiteboard.annotations.status.end; - - if (annotation.status === DRAW_END) { - const selector = { - meetingId, - id: annotation.id, - userId, - }; - - const _annotation = Annotations.findOne(selector); - return _annotation !== null; - } - - return false; -} - -export default function sendAnnotation(credentials, annotation) { - const REDIS_CONFIG = Meteor.settings.private.redis; - const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; - const EVENT_NAME = 'SendWhiteboardAnnotationPubMsg'; - - const { meetingId, requesterUserId, requesterToken } = credentials; - const whiteboardId = annotation.wbId; - - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); - check(annotation, Object); - check(whiteboardId, String); - - // We allow messages to pass through in 3 cases: - // 1. When it's a standard message in presenter mode (Acl check) - // 2. When it's a standard message in multi-user mode (getMultUserStatus check) - // 3. When it's the last message, happens when the user is currently drawing - // and then slide/presentation changes, the user lost presenter rights, - // or multi-user whiteboard gets turned off - // So we allow the last "DRAW_END" message to pass through, to finish the shape. - const allowed = isPodPresenter(meetingId, whiteboardId, requesterUserId) - || getMultiUserStatus(meetingId, whiteboardId) - || isLastMessage(meetingId, annotation, requesterUserId); - - if (!allowed) { - throw new Meteor.Error('not-allowed', `User ${requesterUserId} is not allowed to send an annotation`); - } - - if (annotation.annotationType === 'text') { - check(annotation, { - id: String, - status: String, - annotationType: String, - annotationInfo: { - x: Number, - y: Number, - fontColor: Number, - calcedFontSize: Number, - textBoxWidth: Number, - text: String, - textBoxHeight: Number, - id: String, - whiteboardId: String, - status: String, - fontSize: Number, - dataPoints: String, - type: String, - }, - wbId: String, - userId: String, - position: Number, - }); - } else { - check(annotation, { - id: String, - status: String, - annotationType: String, - annotationInfo: { - color: Number, - thickness: Number, - points: Array, - id: String, - whiteboardId: String, - status: String, - type: String, - dimensions: Match.Maybe([Number]), - }, - wbId: String, - userId: String, - position: Number, - }); - } - - const payload = { - annotation, - }; - - return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, requesterUserId, payload); + sendAnnotationHelper(annotation, meetingId, requesterUserId); } diff --git a/bigbluebutton-html5/imports/api/annotations/server/methods/sendAnnotationHelper.js b/bigbluebutton-html5/imports/api/annotations/server/methods/sendAnnotationHelper.js new file mode 100755 index 0000000000000000000000000000000000000000..88ef045cfa74a8b0542ab8392b009fb574405a55 --- /dev/null +++ b/bigbluebutton-html5/imports/api/annotations/server/methods/sendAnnotationHelper.js @@ -0,0 +1,65 @@ +import RedisPubSub from '/imports/startup/server/redis'; +import { Meteor } from 'meteor/meteor'; +import { check } from 'meteor/check'; + +export default function sendAnnotationHelper(annotation, meetingId, requesterUserId) { + const REDIS_CONFIG = Meteor.settings.private.redis; + const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; + const EVENT_NAME = 'SendWhiteboardAnnotationPubMsg'; + + const whiteboardId = annotation.wbId; + + check(annotation, Object); + check(whiteboardId, String); + + if (annotation.annotationType === 'text') { + check(annotation, { + id: String, + status: String, + annotationType: String, + annotationInfo: { + x: Number, + y: Number, + fontColor: Number, + calcedFontSize: Number, + textBoxWidth: Number, + text: String, + textBoxHeight: Number, + id: String, + whiteboardId: String, + status: String, + fontSize: Number, + dataPoints: String, + type: String, + }, + wbId: String, + userId: String, + position: Number, + }); + } else { + check(annotation, { + id: String, + status: String, + annotationType: String, + annotationInfo: { + color: Number, + thickness: Number, + points: Array, + id: String, + whiteboardId: String, + status: String, + type: String, + dimensions: Match.Maybe([Number]), + }, + wbId: String, + userId: String, + position: Number, + }); + } + + const payload = { + annotation, + }; + + return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, requesterUserId, payload); +} diff --git a/bigbluebutton-html5/imports/api/annotations/server/methods/sendBulkAnnotations.js b/bigbluebutton-html5/imports/api/annotations/server/methods/sendBulkAnnotations.js index eb17b4cee795ebe741959538b0a25a462428c2db..fd4530e744775d2f3430b70912cb6460d1270bd1 100644 --- a/bigbluebutton-html5/imports/api/annotations/server/methods/sendBulkAnnotations.js +++ b/bigbluebutton-html5/imports/api/annotations/server/methods/sendBulkAnnotations.js @@ -1,9 +1,8 @@ -import { check } from 'meteor/check'; -import sendAnnotation from './sendAnnotation'; +import { extractCredentials } from '/imports/api/common/server/helpers'; +import sendAnnotationHelper from './sendAnnotationHelper'; -export default function sendBulkAnnotations(credentials, payload) { - check(credentials, Object); - check(payload, [Object]); +export default function sendBulkAnnotations(payload) { + const { meetingId, requesterUserId } = extractCredentials(this.userId); - payload.forEach(annotation => sendAnnotation(credentials, annotation)); + payload.forEach(annotation => sendAnnotationHelper(annotation, meetingId, requesterUserId)); } diff --git a/bigbluebutton-html5/imports/api/annotations/server/methods/undoAnnotation.js b/bigbluebutton-html5/imports/api/annotations/server/methods/undoAnnotation.js index a55397de53a443879b77bb1732237ef8d2867159..bcab1c2b3509fd2b100d57c62d5e06e6cf2a92f6 100644 --- a/bigbluebutton-html5/imports/api/annotations/server/methods/undoAnnotation.js +++ b/bigbluebutton-html5/imports/api/annotations/server/methods/undoAnnotation.js @@ -1,29 +1,17 @@ -import { getMultiUserStatus } from '/imports/api/common/server/helpers'; import RedisPubSub from '/imports/startup/server/redis'; import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -import isPodPresenter from '/imports/api/presentation-pods/server/utils/isPodPresenter'; - -export default function undoAnnotation(credentials, whiteboardId) { +export default function undoAnnotation(whiteboardId) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'UndoWhiteboardPubMsg'; - const { meetingId, requesterUserId, requesterToken } = credentials; + const { meetingId, requesterUserId } = extractCredentials(this.userId); - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); check(whiteboardId, String); - const allowed = isPodPresenter(meetingId, whiteboardId, requesterUserId) - || getMultiUserStatus(meetingId, whiteboardId); - - if (!allowed) { - throw new Meteor.Error('not-allowed', `User ${requesterUserId} is not allowed to undo the annotation`); - } - const payload = { whiteboardId, }; diff --git a/bigbluebutton-html5/imports/api/annotations/server/publishers.js b/bigbluebutton-html5/imports/api/annotations/server/publishers.js index da757739ed5040603ecb480a6dc67659b565a18f..d79333f70415f73362dcbd0116e0c86f0439de63 100644 --- a/bigbluebutton-html5/imports/api/annotations/server/publishers.js +++ b/bigbluebutton-html5/imports/api/annotations/server/publishers.js @@ -1,16 +1,16 @@ import Annotations from '/imports/api/annotations'; import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -function annotations(credentials) { - const { meetingId, requesterUserId, requesterToken } = credentials; +function annotations() { + if (!this.userId) { + return Annotations.find({ meetingId: '' }); + } - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); + const { meetingId, requesterUserId } = extractCredentials(this.userId); - Logger.debug(`Publishing Annotations for ${meetingId} ${requesterUserId} ${requesterToken}`); + Logger.debug(`Publishing Annotations for ${meetingId} ${requesterUserId}`); return Annotations.find({ meetingId }); } diff --git a/bigbluebutton-html5/imports/api/breakouts/server/methods/createBreakout.js b/bigbluebutton-html5/imports/api/breakouts/server/methods/createBreakout.js index 8fbc22740f6cdfa73aa5e4d4f080a0cf81afd2cb..2b069675ef3fdfc0b0a3e3340998071f89152f45 100644 --- a/bigbluebutton-html5/imports/api/breakouts/server/methods/createBreakout.js +++ b/bigbluebutton-html5/imports/api/breakouts/server/methods/createBreakout.js @@ -1,21 +1,13 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function createBreakoutRoom(credentials, rooms, durationInMinutes, record = false) { +export default function createBreakoutRoom(rooms, durationInMinutes, record = false) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; - const { - meetingId, - requesterUserId, - requesterToken, - } = credentials; - - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); + const { meetingId, requesterUserId } = extractCredentials(this.userId); const eventName = 'CreateBreakoutRoomsCmdMsg'; if (rooms.length > 8) return Logger.info(`Attempt to create breakout rooms with invalid number of rooms in meeting id=${meetingId}`); diff --git a/bigbluebutton-html5/imports/api/breakouts/server/methods/endAllBreakouts.js b/bigbluebutton-html5/imports/api/breakouts/server/methods/endAllBreakouts.js index 4753fc6685e1ad2fa72f7b52600b4a10e0f8516e..ff309659130c7ced4dcecb05b507bcbb9e24f4a1 100644 --- a/bigbluebutton-html5/imports/api/breakouts/server/methods/endAllBreakouts.js +++ b/bigbluebutton-html5/imports/api/breakouts/server/methods/endAllBreakouts.js @@ -1,20 +1,16 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function endAllBreakouts(credentials) { +export default function endAllBreakouts() { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; - const { - meetingId, - requesterUserId, - requesterToken, - } = credentials; + const { meetingId, requesterUserId } = extractCredentials(this.userId); check(meetingId, String); check(requesterUserId, String); - check(requesterToken, String); const eventName = 'EndAllBreakoutRoomsMsg'; return RedisPubSub.publishUserMessage(CHANNEL, eventName, meetingId, requesterUserId, null); diff --git a/bigbluebutton-html5/imports/api/breakouts/server/methods/requestJoinURL.js b/bigbluebutton-html5/imports/api/breakouts/server/methods/requestJoinURL.js index f2da4d7d3208eeec9217d34d6477e0b569484530..ace15db4b87d59c80e7e9616b6b26cec95d49054 100755 --- a/bigbluebutton-html5/imports/api/breakouts/server/methods/requestJoinURL.js +++ b/bigbluebutton-html5/imports/api/breakouts/server/methods/requestJoinURL.js @@ -1,16 +1,13 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function requestJoinURL(credentials, { breakoutId, userId: userIdToInvite }) { +export default function requestJoinURL({ breakoutId, userId: userIdToInvite }) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; - const { meetingId, requesterUserId, requesterToken } = credentials; + const { meetingId, requesterUserId } = extractCredentials(this.userId); - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); const userId = userIdToInvite || requesterUserId; const eventName = 'RequestBreakoutJoinURLReqMsg'; diff --git a/bigbluebutton-html5/imports/api/breakouts/server/publishers.js b/bigbluebutton-html5/imports/api/breakouts/server/publishers.js index dae21d5126e60a03ec0491f0ebe82ca81831bc5b..5f682d423a3e0c41ca7ec0c56e48a0db1d1991ad 100755 --- a/bigbluebutton-html5/imports/api/breakouts/server/publishers.js +++ b/bigbluebutton-html5/imports/api/breakouts/server/publishers.js @@ -2,14 +2,16 @@ import { Meteor } from 'meteor/meteor'; import Breakouts from '/imports/api/breakouts'; import Users from '/imports/api/users'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; const ROLE_MODERATOR = Meteor.settings.public.user.role_moderator; -function breakouts(credentials, moderator = false) { - const { - meetingId, - requesterUserId, - } = credentials; +function breakouts(moderator = false) { + if (!this.userId) { + return Breakouts.find({ meetingId: '' }); + } + + const { meetingId, requesterUserId } = extractCredentials(this.userId); Logger.debug(`Publishing Breakouts for ${meetingId} ${requesterUserId}`); if (moderator) { diff --git a/bigbluebutton-html5/imports/api/captions/server/methods/takeOwnership.js b/bigbluebutton-html5/imports/api/captions/server/methods/takeOwnership.js index e541239a83a2c2bf7e2acbf7e363594e1150c0f4..51b176a2a61ebeb5c2a9136281535e169653b009 100644 --- a/bigbluebutton-html5/imports/api/captions/server/methods/takeOwnership.js +++ b/bigbluebutton-html5/imports/api/captions/server/methods/takeOwnership.js @@ -1,12 +1,11 @@ import { check } from 'meteor/check'; import Captions from '/imports/api/captions'; import updateOwnerId from '/imports/api/captions/server/modifiers/updateOwnerId'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function takeOwnership(credentials, locale) { - const { meetingId, requesterUserId } = credentials; +export default function takeOwnership(locale) { + const { meetingId, requesterUserId } = extractCredentials(this.userId); - check(meetingId, String); - check(requesterUserId, String); check(locale, String); const pad = Captions.findOne({ meetingId, padId: { $regex: `_captions_${locale}$` } }); diff --git a/bigbluebutton-html5/imports/api/captions/server/methods/updateOwner.js b/bigbluebutton-html5/imports/api/captions/server/methods/updateOwner.js index 2262e818af7e563f808510a048a77a9fce2f484f..3608ec308511463fd09d72813e2b33f3cd969175 100644 --- a/bigbluebutton-html5/imports/api/captions/server/methods/updateOwner.js +++ b/bigbluebutton-html5/imports/api/captions/server/methods/updateOwner.js @@ -4,7 +4,7 @@ import Logger from '/imports/startup/server/logger'; import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; -export default function editCaptions(meetingId, userId, padId) { +export default function editCaptions(meetingId, userId, padId) { // TODO const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'UpdateCaptionOwnerPubMsg'; diff --git a/bigbluebutton-html5/imports/api/captions/server/publishers.js b/bigbluebutton-html5/imports/api/captions/server/publishers.js index 245954527e1aa4f6839650ebfc89c8f9341398a8..fc4ce428297ba74496f08a4501f7aa7e0514c142 100644 --- a/bigbluebutton-html5/imports/api/captions/server/publishers.js +++ b/bigbluebutton-html5/imports/api/captions/server/publishers.js @@ -1,13 +1,13 @@ import Captions from '/imports/api/captions'; import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -function captions(credentials) { - const { meetingId } = credentials; - - check(meetingId, String); - +function captions() { + if (!this.userId) { + return Captions.find({ meetingId: '' }); + } + const { meetingId } = extractCredentials(this.userId); Logger.debug(`Publishing Captions for ${meetingId}`); return Captions.find({ meetingId }); diff --git a/bigbluebutton-html5/imports/api/common/server/helpers.js b/bigbluebutton-html5/imports/api/common/server/helpers.js index d4208347344d6ad4fba2bd339ea4bd517285500d..99720cbdb8594cda151eee7b2cda1893e847e65f 100755 --- a/bigbluebutton-html5/imports/api/common/server/helpers.js +++ b/bigbluebutton-html5/imports/api/common/server/helpers.js @@ -1,4 +1,3 @@ -import WhiteboardMultiUser from '/imports/api/whiteboard-multi-user/'; import Users from '/imports/api/users'; const MSG_DIRECT_TYPE = 'DIRECT'; @@ -39,17 +38,6 @@ export const processForHTML5ServerOnly = fn => (message, ...args) => { return fn(message, ...args); }; - -export const getMultiUserStatus = (meetingId, whiteboardId) => { - const data = WhiteboardMultiUser.findOne({ meetingId, whiteboardId }); - - if (data) { - return data.multiUser; - } - - return false; -}; - /** * Calculate a 32 bit FNV-1a hash * Found here: https://gist.github.com/vaiorabbit/5657561 @@ -75,3 +63,11 @@ export const hashFNV32a = (str, asString, seed) => { return hval >>> 0; }; /* eslint-enable */ + +export const extractCredentials = (credentials) => { + if (!credentials) return {}; + const credentialsArray = credentials.split('--'); + const meetingId = credentialsArray[0]; + const requesterUserId = credentialsArray[1]; + return { meetingId, requesterUserId }; +}; diff --git a/bigbluebutton-html5/imports/api/cursor/server/methods/publishCursorUpdate.js b/bigbluebutton-html5/imports/api/cursor/server/methods/publishCursorUpdate.js index c5690c00dee77492bcf34882f9baad419e55ccc3..0ee0dbc411ddcc3697c39a9ca2682634dce087e0 100755 --- a/bigbluebutton-html5/imports/api/cursor/server/methods/publishCursorUpdate.js +++ b/bigbluebutton-html5/imports/api/cursor/server/methods/publishCursorUpdate.js @@ -1,38 +1,10 @@ -import { getMultiUserStatus } from '/imports/api/common/server/helpers'; import RedisPubSub from '/imports/startup/server/redis'; import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; -import isPodPresenter from '/imports/api/presentation-pods/server/utils/isPodPresenter'; - -export default function publishCursorUpdate(credentials, payload) { +export default function publishCursorUpdate(meetingId, requesterUserId, payload) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'SendCursorPositionPubMsg'; - const { meetingId, requesterUserId, requesterToken } = credentials; - - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); - check(payload, { - xPercent: Number, - yPercent: Number, - whiteboardId: String, - }); - - const { - whiteboardId, - xPercent, - yPercent, - } = payload; - - const allowed = isPodPresenter(meetingId, whiteboardId, requesterUserId) - || getMultiUserStatus(meetingId, whiteboardId) - || (xPercent < 0 && yPercent < 0); - if (!allowed) { - throw new Meteor.Error('not-allowed', `User ${requesterUserId} is not allowed to move the cursor`); - } - return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, requesterUserId, payload); } diff --git a/bigbluebutton-html5/imports/api/cursor/server/streamer.js b/bigbluebutton-html5/imports/api/cursor/server/streamer.js index 4c3218960b71813ef6b108f3fb04f9d5c9a7d95d..d8a869c48ccf1d4ef1f7f510db4a918275f4b709 100644 --- a/bigbluebutton-html5/imports/api/cursor/server/streamer.js +++ b/bigbluebutton-html5/imports/api/cursor/server/streamer.js @@ -26,7 +26,7 @@ export function addCursorStreamer(meetingId) { }); streamer.on('publish', (message) => { - publishCursorUpdate(message.credentials, message.payload); + publishCursorUpdate(meetingId, message.userId, message.payload); }); } diff --git a/bigbluebutton-html5/imports/api/external-videos/server/methods/destroyExternalVideo.js b/bigbluebutton-html5/imports/api/external-videos/server/methods/destroyExternalVideo.js index cd2b1772e37a6e3f2d1ae4bd8e60c9808dfdcf64..0be97c31985c1188cec4c5a9c228ed4eaf9a0352 100644 --- a/bigbluebutton-html5/imports/api/external-videos/server/methods/destroyExternalVideo.js +++ b/bigbluebutton-html5/imports/api/external-videos/server/methods/destroyExternalVideo.js @@ -8,4 +8,4 @@ export default function destroyExternalVideo(meetingId) { Logger.info(`Destroying External Video streamer object for ${streamName}`); delete Meteor.StreamerCentral.instances[streamName]; } -}; +} diff --git a/bigbluebutton-html5/imports/api/external-videos/server/methods/initializeExternalVideo.js b/bigbluebutton-html5/imports/api/external-videos/server/methods/initializeExternalVideo.js index 459d99bd9be2f19fb9fd6592fe71c869924d9f41..84d08a8c2cffabbe0e670ee22dd39ba195882e0c 100644 --- a/bigbluebutton-html5/imports/api/external-videos/server/methods/initializeExternalVideo.js +++ b/bigbluebutton-html5/imports/api/external-videos/server/methods/initializeExternalVideo.js @@ -1,5 +1,5 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; +import { extractCredentials } from '/imports/api/common/server/helpers'; import Users from '/imports/api/users'; import Logger from '/imports/startup/server/logger'; @@ -19,10 +19,8 @@ const allowFromPresenter = (eventName, message) => { return ret; }; -export default function initializeExternalVideo(credentials) { - const { meetingId } = credentials; - - check(meetingId, String); +export default function initializeExternalVideo() { + const { meetingId } = extractCredentials(this.userId); const streamName = `external-videos-${meetingId}`; if (!Meteor.StreamerCentral.instances[streamName]) { diff --git a/bigbluebutton-html5/imports/api/external-videos/server/methods/startWatchingExternalVideo.js b/bigbluebutton-html5/imports/api/external-videos/server/methods/startWatchingExternalVideo.js index 407d8a2b0903f037979c9528eca0f70f24ed42a0..e157b7a0b3e0ede194b9d16fa76152a59633bc1b 100644 --- a/bigbluebutton-html5/imports/api/external-videos/server/methods/startWatchingExternalVideo.js +++ b/bigbluebutton-html5/imports/api/external-videos/server/methods/startWatchingExternalVideo.js @@ -3,17 +3,16 @@ import { check } from 'meteor/check'; import Logger from '/imports/startup/server/logger'; import Meetings from '/imports/api/meetings'; import RedisPubSub from '/imports/startup/server/redis'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function startWatchingExternalVideo(credentials, options) { +export default function startWatchingExternalVideo(options) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'StartExternalVideoMsg'; - const { meetingId, requesterUserId } = credentials; + const { meetingId, requesterUserId } = extractCredentials(this.userId); const { externalVideoUrl } = options; - check(meetingId, String); - check(requesterUserId, String); check(externalVideoUrl, String); Meetings.update({ meetingId }, { $set: { externalVideoUrl } }); diff --git a/bigbluebutton-html5/imports/api/external-videos/server/methods/stopWatchingExternalVideo.js b/bigbluebutton-html5/imports/api/external-videos/server/methods/stopWatchingExternalVideo.js index 67f6eef54a5c6b4a588720d8612aa08037f94826..5165e73e085672b881844a9d5412ddc976067a9e 100644 --- a/bigbluebutton-html5/imports/api/external-videos/server/methods/stopWatchingExternalVideo.js +++ b/bigbluebutton-html5/imports/api/external-videos/server/methods/stopWatchingExternalVideo.js @@ -1,19 +1,13 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import Logger from '/imports/startup/server/logger'; import Meetings from '/imports/api/meetings'; import RedisPubSub from '/imports/startup/server/redis'; -export default function stopWatchingExternalVideo(credentials) { +export default function stopWatchingExternalVideo(meetingId, requesterUserId) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'StopExternalVideoMsg'; - const { meetingId, requesterUserId } = credentials; - - check(meetingId, String); - check(requesterUserId, String); - const meeting = Meetings.findOne({ meetingId }); if (!meeting || meeting.externalVideoUrl === null) return; diff --git a/bigbluebutton-html5/imports/api/group-chat-msg/server/methods/clearPublicChatHistory.js b/bigbluebutton-html5/imports/api/group-chat-msg/server/methods/clearPublicChatHistory.js index 1044404b39f7508f1d6f3cd5596d56626b983b94..df88282d41d3fe5d86172de81dabf8413eddc708 100644 --- a/bigbluebutton-html5/imports/api/group-chat-msg/server/methods/clearPublicChatHistory.js +++ b/bigbluebutton-html5/imports/api/group-chat-msg/server/methods/clearPublicChatHistory.js @@ -1,19 +1,15 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function clearPublicChatHistory(credentials) { +export default function clearPublicChatHistory() { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'ClearPublicChatHistoryPubMsg'; const CHAT_CONFIG = Meteor.settings.public.chat; const PUBLIC_GROUP_CHAT_ID = CHAT_CONFIG.public_group_id; - const { meetingId, requesterUserId, requesterToken } = credentials; - - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); + const { meetingId, requesterUserId } = extractCredentials(this.userId); const payload = { chatId: PUBLIC_GROUP_CHAT_ID, diff --git a/bigbluebutton-html5/imports/api/group-chat-msg/server/methods/sendGroupChatMsg.js b/bigbluebutton-html5/imports/api/group-chat-msg/server/methods/sendGroupChatMsg.js index 5d4aa6882e926786bdbd298a2257c431126e0096..f486cdfe6c56ee17e8867fcd804b49119dceb2f8 100644 --- a/bigbluebutton-html5/imports/api/group-chat-msg/server/methods/sendGroupChatMsg.js +++ b/bigbluebutton-html5/imports/api/group-chat-msg/server/methods/sendGroupChatMsg.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; import RegexWebUrl from '/imports/utils/regex-weburl'; +import { extractCredentials } from '/imports/api/common/server/helpers'; const HTML_SAFE_MAP = { '<': '<', @@ -26,16 +27,13 @@ const parseMessage = (message) => { return parsedMessage; }; -export default function sendGroupChatMsg(credentials, chatId, message) { +export default function sendGroupChatMsg(chatId, message) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'SendGroupChatMessageMsg'; - const { meetingId, requesterUserId, requesterToken } = credentials; + const { meetingId, requesterUserId } = extractCredentials(this.userId); - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); check(message, Object); const parsedMessage = parseMessage(message.message); diff --git a/bigbluebutton-html5/imports/api/group-chat-msg/server/methods/startUserTyping.js b/bigbluebutton-html5/imports/api/group-chat-msg/server/methods/startUserTyping.js index 4b88e07055e5f1ed5f219ac370dd90260f8e696d..b46288d80e6d27f07a02eff1862cf328ff5c4a93 100644 --- a/bigbluebutton-html5/imports/api/group-chat-msg/server/methods/startUserTyping.js +++ b/bigbluebutton-html5/imports/api/group-chat-msg/server/methods/startUserTyping.js @@ -1,17 +1,16 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function startUserTyping(credentials, chatId) { +export default function startUserTyping(chatId) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'UserTypingPubMsg'; const CHAT_CONFIG = Meteor.settings.public.chat; const PUBLIC_GROUP_CHAT_ID = CHAT_CONFIG.public_group_id; - const { meetingId, requesterUserId } = credentials; + const { meetingId, requesterUserId } = extractCredentials(this.userId); - check(meetingId, String); - check(requesterUserId, String); check(chatId, String); const payload = { diff --git a/bigbluebutton-html5/imports/api/group-chat-msg/server/methods/stopUserTyping.js b/bigbluebutton-html5/imports/api/group-chat-msg/server/methods/stopUserTyping.js index 582f1d95de3f294e8d7babc4d68990c3098a6786..12cdaefa07a4b6f28cf004a798aeb71fab4619a1 100644 --- a/bigbluebutton-html5/imports/api/group-chat-msg/server/methods/stopUserTyping.js +++ b/bigbluebutton-html5/imports/api/group-chat-msg/server/methods/stopUserTyping.js @@ -1,12 +1,9 @@ -import { check } from 'meteor/check'; import { UsersTyping } from '/imports/api/group-chat-msg'; import stopTyping from '../modifiers/stopTyping'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function stopUserTyping(credentials) { - const { meetingId, requesterUserId } = credentials; - - check(meetingId, String); - check(requesterUserId, String); +export default function stopUserTyping() { + const { meetingId, requesterUserId } = extractCredentials(this.userId); const userTyping = UsersTyping.findOne({ meetingId, diff --git a/bigbluebutton-html5/imports/api/group-chat-msg/server/publishers.js b/bigbluebutton-html5/imports/api/group-chat-msg/server/publishers.js index cc9282cdfe1e5d3da6192560e5bb14ecb7f060e7..3b22d84ddfb66293825f636ead554d03da391bee 100644 --- a/bigbluebutton-html5/imports/api/group-chat-msg/server/publishers.js +++ b/bigbluebutton-html5/imports/api/group-chat-msg/server/publishers.js @@ -1,20 +1,19 @@ import { GroupChatMsg, UsersTyping } from '/imports/api/group-chat-msg'; import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -function groupChatMsg(credentials, chatsIds) { - const { meetingId, requesterUserId, requesterToken } = credentials; - - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); +function groupChatMsg(chatsIds) { + if (!this.userId) { + return GroupChatMsg.find({ meetingId: '' }); + } + const { meetingId, requesterUserId } = extractCredentials(this.userId); const CHAT_CONFIG = Meteor.settings.public.chat; const PUBLIC_GROUP_CHAT_ID = CHAT_CONFIG.public_group_id; - Logger.debug(`Publishing group-chat-msg for ${meetingId} ${requesterUserId} ${requesterToken}`); + Logger.debug(`Publishing group-chat-msg for ${meetingId} ${requesterUserId}`); return GroupChatMsg.find({ $or: [ @@ -31,12 +30,12 @@ function publish(...args) { Meteor.publish('group-chat-msg', publish); -function usersTyping(credentials) { - const { meetingId, requesterUserId, requesterToken } = credentials; +function usersTyping() { + if (!this.userId) { + return UsersTyping.find({ meetingId: '' }); + } - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); + const { meetingId } = extractCredentials(this.userId); return UsersTyping.find({ meetingId }); } diff --git a/bigbluebutton-html5/imports/api/group-chat/server/methods/createGroupChat.js b/bigbluebutton-html5/imports/api/group-chat/server/methods/createGroupChat.js index df2bc90d48d3d8fca5c6ab1f7703e414399f12e3..2244289cc84a9300b87a3dd5a548b9da73f51d4a 100644 --- a/bigbluebutton-html5/imports/api/group-chat/server/methods/createGroupChat.js +++ b/bigbluebutton-html5/imports/api/group-chat/server/methods/createGroupChat.js @@ -2,18 +2,15 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; import { CHAT_ACCESS_PRIVATE } from '/imports/api/group-chat'; +import { extractCredentials } from '/imports/api/common/server/helpers'; - -export default function createGroupChat(credentials, receiver) { +export default function createGroupChat(receiver) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'CreateGroupChatReqMsg'; - const { meetingId, requesterUserId, requesterToken } = credentials; + const { meetingId, requesterUserId } = extractCredentials(this.userId); - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); check(receiver, Object); const payload = { diff --git a/bigbluebutton-html5/imports/api/group-chat/server/methods/destroyGroupChat.js b/bigbluebutton-html5/imports/api/group-chat/server/methods/destroyGroupChat.js index 99a0fa481a15a52243505dbe64fb5935aac11f12..fc221e22298862947b674abf9a7fcad246013022 100644 --- a/bigbluebutton-html5/imports/api/group-chat/server/methods/destroyGroupChat.js +++ b/bigbluebutton-html5/imports/api/group-chat/server/methods/destroyGroupChat.js @@ -1,15 +1,11 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function createGroupChat(credentials) { +export default function createGroupChat() { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; - const { meetingId, requesterUserId, requesterToken } = credentials; - - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); + const { meetingId, requesterUserId } = extractCredentials(this.userId); const eventName = 'DestroyGroupChatReqMsg'; diff --git a/bigbluebutton-html5/imports/api/group-chat/server/publishers.js b/bigbluebutton-html5/imports/api/group-chat/server/publishers.js index d967f1310309a624e3d2388cbcef1024840cc7a3..f03ad0586ae0eb28675eefe2fb663083190b5acb 100644 --- a/bigbluebutton-html5/imports/api/group-chat/server/publishers.js +++ b/bigbluebutton-html5/imports/api/group-chat/server/publishers.js @@ -1,20 +1,19 @@ import GroupChat from '/imports/api/group-chat'; import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -function groupChat(credentials) { - const { meetingId, requesterUserId, requesterToken } = credentials; - - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); +function groupChat() { + if (!this.userId) { + return GroupChat.find({ meetingId: '' }); + } + const { meetingId, requesterUserId } = extractCredentials(this.userId); const CHAT_CONFIG = Meteor.settings.public.chat; const PUBLIC_CHAT_TYPE = CHAT_CONFIG.type_public; - Logger.debug(`Publishing group-chat for ${meetingId} ${requesterUserId} ${requesterToken}`); + Logger.debug(`Publishing group-chat for ${meetingId} ${requesterUserId}`); return GroupChat.find({ $or: [ diff --git a/bigbluebutton-html5/imports/api/guest-users/server/methods/allowPendingUsers.js b/bigbluebutton-html5/imports/api/guest-users/server/methods/allowPendingUsers.js index 090ad1662127b0d7f5302bacd8e96081074f33f3..55837d56c238e3365086de887f057e202a31d66d 100644 --- a/bigbluebutton-html5/imports/api/guest-users/server/methods/allowPendingUsers.js +++ b/bigbluebutton-html5/imports/api/guest-users/server/methods/allowPendingUsers.js @@ -2,21 +2,15 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'GuestsWaitingApprovedMsg'; -export default function allowPendingUsers(credentials, guests, status) { - const { - meetingId, - requesterUserId, - requesterToken, - } = credentials; +export default function allowPendingUsers(guests, status) { + const { meetingId, requesterUserId } = extractCredentials(this.userId); - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); check(guests, Array); const mappedGuests = guests.map(guest => ({ status, guest: guest.intId })); @@ -24,7 +18,6 @@ export default function allowPendingUsers(credentials, guests, status) { approvedBy: requesterUserId, guests: mappedGuests, }; - Logger.info(`User=${requesterUserId} ${status} guests ${JSON.stringify(mappedGuests)}`); diff --git a/bigbluebutton-html5/imports/api/guest-users/server/methods/changeGuestPolicy.js b/bigbluebutton-html5/imports/api/guest-users/server/methods/changeGuestPolicy.js index 638993955884b635d7e5bc09971341e0e385949b..d0f7e140e56f5cfbe9230da8364d7bab2faa04db 100644 --- a/bigbluebutton-html5/imports/api/guest-users/server/methods/changeGuestPolicy.js +++ b/bigbluebutton-html5/imports/api/guest-users/server/methods/changeGuestPolicy.js @@ -2,21 +2,15 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'SetGuestPolicyCmdMsg'; -export default function changeGuestPolicy(credentials, policyRule) { - const { - meetingId, - requesterUserId, - requesterToken, - } = credentials; +export default function changeGuestPolicy(policyRule) { + const { meetingId, requesterUserId } = extractCredentials(this.userId); - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); check(policyRule, String); const payload = { diff --git a/bigbluebutton-html5/imports/api/guest-users/server/publishers.js b/bigbluebutton-html5/imports/api/guest-users/server/publishers.js index de3f8fb14b785b7d390b25c6530774ab58a74589..23e41d51bcf9c48cf08af105b767415447bd1d1f 100644 --- a/bigbluebutton-html5/imports/api/guest-users/server/publishers.js +++ b/bigbluebutton-html5/imports/api/guest-users/server/publishers.js @@ -1,16 +1,16 @@ import GuestUsers from '/imports/api/guest-users/'; import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -function guestUsers(credentials) { - const { meetingId, requesterUserId, requesterToken } = credentials; +function guestUsers() { + if (!this.userId) { + return GuestUsers.find({ meetingId: '' }); + } - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); + const { meetingId, requesterUserId } = extractCredentials(this.userId); - Logger.info(`Publishing Slides for ${meetingId} ${requesterUserId} ${requesterToken}`); + Logger.info(`Publishing Slides for ${meetingId} ${requesterUserId}`); return GuestUsers.find({ meetingId }); } diff --git a/bigbluebutton-html5/imports/api/local-settings/server/methods/userChangedLocalSettings.js b/bigbluebutton-html5/imports/api/local-settings/server/methods/userChangedLocalSettings.js index 032263d7bf191678cf135f2b480d37740dfb1409..4cb6a5d5615a4d4b73cd8847c4998fce2e8a15ef 100644 --- a/bigbluebutton-html5/imports/api/local-settings/server/methods/userChangedLocalSettings.js +++ b/bigbluebutton-html5/imports/api/local-settings/server/methods/userChangedLocalSettings.js @@ -2,14 +2,13 @@ import _ from 'lodash'; import { check } from 'meteor/check'; import LocalSettings from '/imports/api/local-settings'; import setChangedLocalSettings from '../modifiers/setChangedLocalSettings'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function userChangedLocalSettings(credentials, settings) { - const { meetingId, requesterUserId } = credentials; +export default function userChangedLocalSettings(settings) { + const { meetingId, requesterUserId } = extractCredentials(this.userId); if (!meetingId || !requesterUserId) return; - check(meetingId, String); - check(requesterUserId, String); check(settings, Object); const userLocalSettings = LocalSettings diff --git a/bigbluebutton-html5/imports/api/local-settings/server/publishers.js b/bigbluebutton-html5/imports/api/local-settings/server/publishers.js index 74a581589530b6886b21a3e7e44693a538e90be3..b492c801f3011dc3fe4d4a6a6dab3445d24c3a02 100644 --- a/bigbluebutton-html5/imports/api/local-settings/server/publishers.js +++ b/bigbluebutton-html5/imports/api/local-settings/server/publishers.js @@ -1,13 +1,13 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import LocalSettings from '/imports/api/local-settings'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -function localSettings(credentials) { - const { meetingId, requesterUserId } = credentials; - - check(meetingId, String); - check(requesterUserId, String); +function localSettings() { + if (!this.userId) { + return LocalSettings.find({ meetingId: '' }); + } + const { meetingId, requesterUserId } = extractCredentials(this.userId); Logger.debug(`Publishing local settings for user=${requesterUserId}`); diff --git a/bigbluebutton-html5/imports/api/log-client/server/methods/logClient.js b/bigbluebutton-html5/imports/api/log-client/server/methods/logClient.js index 837c8042bb3cc4be9f79586e5e46216203de6cea..d709aa1d7069c09e9e151196aa3c09f2fb0ef193 100755 --- a/bigbluebutton-html5/imports/api/log-client/server/methods/logClient.js +++ b/bigbluebutton-html5/imports/api/log-client/server/methods/logClient.js @@ -11,7 +11,7 @@ const logClient = function (type, logDescription, logCode = 'was_not_provided', userInfo, }; - if (User) { + if (User) { // TODO-- if ((userInfo.credentials && User.meetingId === userInfo.credentials.meetingId) || ((userInfo.meetingId && User.meetingId === userInfo.meetingId))) { logContents.extraInfo.validUser = 'valid'; diff --git a/bigbluebutton-html5/imports/api/meetings/server/methods/endMeeting.js b/bigbluebutton-html5/imports/api/meetings/server/methods/endMeeting.js index d482dee1f02abcdac9d2f907d30628b6894ca039..2d8811e8fb6b358f68e1b32225d9a3c70acd2560 100644 --- a/bigbluebutton-html5/imports/api/meetings/server/methods/endMeeting.js +++ b/bigbluebutton-html5/imports/api/meetings/server/methods/endMeeting.js @@ -1,34 +1,18 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; import Logger from '/imports/startup/server/logger'; -import Users from '/imports/api/users'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function endMeeting(credentials) { +export default function endMeeting() { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'LogoutAndEndMeetingCmdMsg'; - const ROLE_MODERATOR = Meteor.settings.public.user.role_moderator; + const { meetingId, requesterUserId } = extractCredentials(this.userId); - const { meetingId, requesterUserId, requesterToken } = credentials; - - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); - - const selector = { - meetingId, + const payload = { userId: requesterUserId, }; - const user = Users.findOne(selector); - - if (!!user && user.role === ROLE_MODERATOR) { - const payload = { - userId: requesterUserId, - }; - - Logger.verbose(`Meeting '${meetingId}' is destroyed by '${requesterUserId}'`); + Logger.verbose(`Meeting '${meetingId}' is destroyed by '${requesterUserId}'`); - return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, requesterUserId, payload); - } + return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, requesterUserId, payload); } diff --git a/bigbluebutton-html5/imports/api/meetings/server/methods/toggleLockSettings.js b/bigbluebutton-html5/imports/api/meetings/server/methods/toggleLockSettings.js index 823840320736a9f12500ee0c6e5e7a1f216d45f4..152d6039475279dc27b176159542a641e54bb043 100755 --- a/bigbluebutton-html5/imports/api/meetings/server/methods/toggleLockSettings.js +++ b/bigbluebutton-html5/imports/api/meetings/server/methods/toggleLockSettings.js @@ -1,16 +1,14 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function toggleLockSettings(credentials, lockSettingsProps) { +export default function toggleLockSettings(lockSettingsProps) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'ChangeLockSettingsInMeetingCmdMsg'; + const { meetingId, requesterUserId } = extractCredentials(this.userId); - const { meetingId, requesterUserId } = credentials; - - check(meetingId, String); - check(requesterUserId, String); check(lockSettingsProps, { disableCam: Boolean, disableMic: Boolean, diff --git a/bigbluebutton-html5/imports/api/meetings/server/methods/toggleRecording.js b/bigbluebutton-html5/imports/api/meetings/server/methods/toggleRecording.js index 4d708c0564453178e0a8b9ae71c6ca7ca7b5cc15..0bf20e5211018b2a2e48b5bcbcedb8f1d2fe9e60 100644 --- a/bigbluebutton-html5/imports/api/meetings/server/methods/toggleRecording.js +++ b/bigbluebutton-html5/imports/api/meetings/server/methods/toggleRecording.js @@ -1,20 +1,16 @@ -import { check } from 'meteor/check'; import Logger from '/imports/startup/server/logger'; import { Meteor } from 'meteor/meteor'; import RedisPubSub from '/imports/startup/server/redis'; import { RecordMeetings } from '/imports/api/meetings'; import Users from '/imports/api/users'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function toggleRecording(credentials) { +export default function toggleRecording() { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const ROLE_MODERATOR = Meteor.settings.public.user.role_moderator; - const { meetingId, requesterUserId, requesterToken } = credentials; - - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); + const { meetingId, requesterUserId } = extractCredentials(this.userId); const EVENT_NAME = 'SetRecordingStatusCmdMsg'; let meetingRecorded; @@ -30,7 +26,7 @@ export default function toggleRecording(credentials) { } = recordObject; meetingRecorded = recording; - allowedToRecord = record && allowStartStopRecording; + allowedToRecord = record && allowStartStopRecording; // TODO-- remove some day } const payload = { diff --git a/bigbluebutton-html5/imports/api/meetings/server/methods/toggleWebcamsOnlyForModerator.js b/bigbluebutton-html5/imports/api/meetings/server/methods/toggleWebcamsOnlyForModerator.js index 94935c51a76c87decedb9482d1b7b0f9c83f9bc2..93553bb128a0c5c15f49bb8400e0029a8361390e 100755 --- a/bigbluebutton-html5/imports/api/meetings/server/methods/toggleWebcamsOnlyForModerator.js +++ b/bigbluebutton-html5/imports/api/meetings/server/methods/toggleWebcamsOnlyForModerator.js @@ -1,16 +1,14 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; +import { extractCredentials } from '../../../common/server/helpers'; -export default function toggleWebcamsOnlyForModerator(credentials, webcamsOnlyForModerator) { +export default function toggleWebcamsOnlyForModerator(webcamsOnlyForModerator) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'UpdateWebcamsOnlyForModeratorCmdMsg'; - const { meetingId, requesterUserId } = credentials; - - check(meetingId, String); - check(requesterUserId, String); + const { meetingId, requesterUserId } = extractCredentials(this.userId); check(webcamsOnlyForModerator, Boolean); const payload = { diff --git a/bigbluebutton-html5/imports/api/meetings/server/methods/transferUser.js b/bigbluebutton-html5/imports/api/meetings/server/methods/transferUser.js index 6841e1147138b1d9bd1dabefa61a9965247640a4..628267300ec84c7fcc0909ea617c4ac9f76e22a2 100644 --- a/bigbluebutton-html5/imports/api/meetings/server/methods/transferUser.js +++ b/bigbluebutton-html5/imports/api/meetings/server/methods/transferUser.js @@ -1,18 +1,15 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function transferUser(credentials, fromMeetingId, toMeetingId) { + +export default function transferUser(fromMeetingId, toMeetingId) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'TransferUserToMeetingRequestMsg'; - const { meetingId, requesterUserId, requesterToken } = credentials; - - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); + const { meetingId, requesterUserId } = extractCredentials(this.userId); const payload = { fromMeetingId, diff --git a/bigbluebutton-html5/imports/api/meetings/server/publishers.js b/bigbluebutton-html5/imports/api/meetings/server/publishers.js index af0012b942b25575e8efa72c777732ce5c9f7b3a..01a1e5452fe3a12556a799e7da4a6c25794f1eb2 100755 --- a/bigbluebutton-html5/imports/api/meetings/server/publishers.js +++ b/bigbluebutton-html5/imports/api/meetings/server/publishers.js @@ -1,19 +1,18 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import Meetings, { RecordMeetings, MeetingTimeRemaining } from '/imports/api/meetings'; import Users from '/imports/api/users'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; const ROLE_MODERATOR = Meteor.settings.public.user.role_moderator; -function meetings(credentials, isModerator = false) { - const { meetingId, requesterUserId, requesterToken } = credentials; - - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); +function meetings(isModerator = false) { + if (!this.userId) { + return Meetings.find({ meetingId: '' }); + } + const { meetingId, requesterUserId } = extractCredentials(this.userId); - Logger.debug(`Publishing meeting =${meetingId} ${requesterUserId} ${requesterToken}`); + Logger.debug(`Publishing meeting =${meetingId} ${requesterUserId}`); const selector = { $or: [ @@ -47,11 +46,11 @@ function publish(...args) { Meteor.publish('meetings', publish); -function recordMeetings(credentials) { - const { meetingId, requesterUserId, requesterToken } = credentials; - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); +function recordMeetings() { + if (!this.userId) { + return RecordMeetings.find({ meetingId: '' }); + } + const { meetingId } = extractCredentials(this.userId); return RecordMeetings.find({ meetingId }); } @@ -62,11 +61,11 @@ function recordPublish(...args) { Meteor.publish('record-meetings', recordPublish); -function meetingTimeRemaining(credentials) { - const { meetingId, requesterUserId, requesterToken } = credentials; - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); +function meetingTimeRemaining() { + if (!this.userId) { + return MeetingTimeRemaining.find({ meetingId: '' }); + } + const { meetingId } = extractCredentials(this.userId); return MeetingTimeRemaining.find({ meetingId }); } diff --git a/bigbluebutton-html5/imports/api/network-information/server/methods/userInstabilityDetected.js b/bigbluebutton-html5/imports/api/network-information/server/methods/userInstabilityDetected.js index 790058e8e08ebdc9b4ea37c11ac6be2c138cdfd8..0d7955e4e72c5b250ed078d866ac738aaf7a6f0f 100644 --- a/bigbluebutton-html5/imports/api/network-information/server/methods/userInstabilityDetected.js +++ b/bigbluebutton-html5/imports/api/network-information/server/methods/userInstabilityDetected.js @@ -1,12 +1,10 @@ import { check } from 'meteor/check'; import NetworkInformation from '/imports/api/network-information'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function userInstabilityDetected(credentials, sender) { - const { meetingId, requesterUserId: receiver } = credentials; - - check(meetingId, String); - check(receiver, String); +export default function userInstabilityDetected(sender) { + const { meetingId, requesterUserId: receiver } = extractCredentials(this.userId); check(sender, String); const payload = { diff --git a/bigbluebutton-html5/imports/api/network-information/server/publisher.js b/bigbluebutton-html5/imports/api/network-information/server/publisher.js index 0e83b5cb9e987e80eb03f395f64fbf57a6aa4062..cef87a33ea2fc2ddd925884c80dbae699d893674 100644 --- a/bigbluebutton-html5/imports/api/network-information/server/publisher.js +++ b/bigbluebutton-html5/imports/api/network-information/server/publisher.js @@ -1,11 +1,12 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import NetworkInformation from '/imports/api/network-information'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -function networkInformation(credentials) { - const { meetingId } = credentials; - - check(meetingId, String); +function networkInformation() { + if (!this.userId) { + return NetworkInformation.find({ meetingId: '' }); + } + const { meetingId } = extractCredentials(this.userId); return NetworkInformation.find({ meetingId, diff --git a/bigbluebutton-html5/imports/api/note/server/publishers.js b/bigbluebutton-html5/imports/api/note/server/publishers.js index 2728b80f28722f925bdf797ef48d9bb3de7257e2..41092f671fe40b8f976bbee32afc028f2340c5d1 100644 --- a/bigbluebutton-html5/imports/api/note/server/publishers.js +++ b/bigbluebutton-html5/imports/api/note/server/publishers.js @@ -1,16 +1,15 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import Logger from '/imports/startup/server/logger'; import Note from '/imports/api/note'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -function note(credentials) { - const { meetingId, requesterUserId, requesterToken } = credentials; +function note() { + if (!this.userId) { + return Note.find({ meetingId: '' }); + } + const { meetingId, requesterUserId } = extractCredentials(this.userId); - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); - - Logger.info(`Publishing note for ${meetingId} ${requesterUserId} ${requesterToken}`); + Logger.info(`Publishing note for ${meetingId} ${requesterUserId}`); return Note.find({ meetingId }); } diff --git a/bigbluebutton-html5/imports/api/ping-pong/server/methods/ping.js b/bigbluebutton-html5/imports/api/ping-pong/server/methods/ping.js index 4b4e3e880cb03ca20478176d00aab6a6d19c9be9..7fcd87b81c8e401d9b155045cdfce8dd5bcf9ceb 100644 --- a/bigbluebutton-html5/imports/api/ping-pong/server/methods/ping.js +++ b/bigbluebutton-html5/imports/api/ping-pong/server/methods/ping.js @@ -1,13 +1,9 @@ -import { check } from 'meteor/check'; import Users from '/imports/api/users'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function ping(credentials) { - const { meetingId, requesterUserId, requesterToken } = credentials; - - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); +export default function ping() { + const { meetingId, requesterUserId } = extractCredentials(this.userId); const selector = { meetingId, diff --git a/bigbluebutton-html5/imports/api/ping-pong/server/publishers.js b/bigbluebutton-html5/imports/api/ping-pong/server/publishers.js index 972393535e504ce3757c38326dd3a2f8544c96b0..bacb6ed8f38033d964e5b61def6e7876c1f23e74 100644 --- a/bigbluebutton-html5/imports/api/ping-pong/server/publishers.js +++ b/bigbluebutton-html5/imports/api/ping-pong/server/publishers.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import Logger from '/imports/startup/server/logger'; import _ from 'lodash'; +import { extractCredentials } from '/imports/api/common/server/helpers'; const COLLECTION_NAME = 'ping-pong'; const INTERVAL_IN_SETTINGS = (Meteor.settings.public.pingPong.clearUsersInSeconds) * 1000; @@ -9,8 +10,11 @@ const PONG_INTERVAL_IN_SETTINGS = (Meteor.settings.public.pingPong.pongTimeInSec const PONG_INTERVAL = PONG_INTERVAL_IN_SETTINGS >= (INTERVAL_TIME / 2) ? (INTERVAL_TIME / 2) : PONG_INTERVAL_IN_SETTINGS; -function pingPong(credentials) { - const { meetingId, requesterUserId } = credentials; +function pingPong() { + if (!this.userId) { + return; // TODO-- is there a more appropriate set to return? + } + const { meetingId, requesterUserId } = extractCredentials(this.userId); const id = _.uniqueId('pong-'); Logger.info(`Starting ping-pong publish for userId: ${requesterUserId}`); const pongSender = (interval) => { diff --git a/bigbluebutton-html5/imports/api/polls/server/methods/publishPoll.js b/bigbluebutton-html5/imports/api/polls/server/methods/publishPoll.js index b2f40f9fae17b4b8753b4af1f29f539c1916858a..701bea3b5c46f585c95bd0ac947bb23c903ae5a4 100644 --- a/bigbluebutton-html5/imports/api/polls/server/methods/publishPoll.js +++ b/bigbluebutton-html5/imports/api/polls/server/methods/publishPoll.js @@ -1,18 +1,15 @@ import RedisPubSub from '/imports/startup/server/redis'; -import { check } from 'meteor/check'; import Polls from '/imports/api/polls'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function publishPoll(credentials) { - const { meetingId, requesterUserId } = credentials; +export default function publishPoll() { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'ShowPollResultReqMsg'; - check(meetingId, String); - check(requesterUserId, String); - - const poll = Polls.findOne({ meetingId }); + const { meetingId, requesterUserId } = extractCredentials(this.userId); + const poll = Polls.findOne({ meetingId }); // TODO--send pollid from client if (!poll) { Logger.error(`Attempted to publish inexisting poll for meetingId: ${meetingId}`); return false; diff --git a/bigbluebutton-html5/imports/api/polls/server/methods/publishVote.js b/bigbluebutton-html5/imports/api/polls/server/methods/publishVote.js index 63985bd8e62e244be654085b7d0705463b72dbbc..66b6dd938b5870463812b7982bec77cc30332e91 100644 --- a/bigbluebutton-html5/imports/api/polls/server/methods/publishVote.js +++ b/bigbluebutton-html5/imports/api/polls/server/methods/publishVote.js @@ -2,14 +2,14 @@ import RedisPubSub from '/imports/startup/server/redis'; import { check } from 'meteor/check'; import Polls from '/imports/api/polls'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function publishVote(credentials, id, pollAnswerId) { // TODO discuss location +export default function publishVote(id, pollAnswerId) { // TODO discuss location const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'RespondToPollReqMsg'; - const { meetingId, requesterUserId } = credentials; - + const { meetingId, requesterUserId } = extractCredentials(this.userId); /* We keep an array of people who were in the meeting at the time the poll was started. The poll is published to them only. @@ -22,8 +22,6 @@ export default function publishVote(credentials, id, pollAnswerId) { // TODO dis id, }); - check(meetingId, String); - check(requesterUserId, String); check(pollAnswerId, Number); check(currentPoll, Object); check(currentPoll.meetingId, String); diff --git a/bigbluebutton-html5/imports/api/polls/server/methods/startPoll.js b/bigbluebutton-html5/imports/api/polls/server/methods/startPoll.js index 7f4722837a881088b52a508d751f0ec4fd1a287d..f6a08e3dd9045736783f28c8ef4ada7375048bbc 100644 --- a/bigbluebutton-html5/imports/api/polls/server/methods/startPoll.js +++ b/bigbluebutton-html5/imports/api/polls/server/methods/startPoll.js @@ -1,16 +1,15 @@ import RedisPubSub from '/imports/startup/server/redis'; -import Polls from '/imports/api/polls'; import { check } from 'meteor/check'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function startPoll(credentials, pollType, pollId, answers) { - const { meetingId, requesterUserId } = credentials; +export default function startPoll(pollType, pollId, answers) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; let EVENT_NAME = 'StartPollReqMsg'; - check(meetingId, String); - check(requesterUserId, String); + const { meetingId, requesterUserId } = extractCredentials(this.userId); + check(pollId, String); check(pollType, String); diff --git a/bigbluebutton-html5/imports/api/polls/server/methods/stopPoll.js b/bigbluebutton-html5/imports/api/polls/server/methods/stopPoll.js index 0d20a850b39a268e470e2ca58b245b8bbb47ca1b..af0c50dd007bf60700260495483e8a696c465869 100644 --- a/bigbluebutton-html5/imports/api/polls/server/methods/stopPoll.js +++ b/bigbluebutton-html5/imports/api/polls/server/methods/stopPoll.js @@ -1,20 +1,17 @@ import RedisPubSub from '/imports/startup/server/redis'; -import { check } from 'meteor/check'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function stopPoll(credentials) { - const { meetingId, requesterUserId } = credentials; +export default function stopPoll() { + const { meetingId, requesterUserId: requesterId } = extractCredentials(this.userId); const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'StopPollReqMsg'; - check(meetingId, String); - check(requesterUserId, String); - return RedisPubSub.publishUserMessage( CHANNEL, EVENT_NAME, meetingId, - requesterUserId, - ({ requesterId: requesterUserId }), + requesterId, + ({ requesterId }), ); } diff --git a/bigbluebutton-html5/imports/api/polls/server/publishers.js b/bigbluebutton-html5/imports/api/polls/server/publishers.js index c2e018fe6f176a7e930b8b758fe513e30dd14ce6..70804193fc6eef13403017c75a2d1b373e16cb9b 100644 --- a/bigbluebutton-html5/imports/api/polls/server/publishers.js +++ b/bigbluebutton-html5/imports/api/polls/server/publishers.js @@ -1,10 +1,13 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import Logger from '/imports/startup/server/logger'; import Polls from '/imports/api/polls'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -Meteor.publish('current-poll', (meetingId) => { - check(meetingId, String); +function currentPoll() { + if (!this.userId) { + return Polls.find({ meetingId: '' }); + } + const { meetingId } = extractCredentials(this.userId); const selector = { meetingId, @@ -13,17 +16,24 @@ Meteor.publish('current-poll', (meetingId) => { Logger.debug(`Publishing poll for meeting=${meetingId}`); return Polls.find(selector); -}); +} + +function publishCurrentPoll(...args) { + const boundPolls = currentPoll.bind(this); + return boundPolls(...args); +} + +Meteor.publish('current-poll', publishCurrentPoll); -function polls(credentials) { - const { meetingId, requesterUserId, requesterToken } = credentials; +function polls() { + if (!this.userId) { + return Polls.find({ meetingId: '' }); + } - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); + const { meetingId, requesterUserId } = extractCredentials(this.userId); - Logger.debug(`Publishing polls =${meetingId} ${requesterUserId} ${requesterToken}`); + Logger.debug(`Publishing polls =${meetingId} ${requesterUserId}`); const selector = { meetingId, diff --git a/bigbluebutton-html5/imports/api/presentation-pods/server/methods/setPresenterInPodReqMsg.js b/bigbluebutton-html5/imports/api/presentation-pods/server/methods/setPresenterInPodReqMsg.js index 8679aa62cf75357d4aa4ad916a512edcbbecac81..6408dd1311dfa2b4504751e05552c66304ebb691 100644 --- a/bigbluebutton-html5/imports/api/presentation-pods/server/methods/setPresenterInPodReqMsg.js +++ b/bigbluebutton-html5/imports/api/presentation-pods/server/methods/setPresenterInPodReqMsg.js @@ -2,7 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; -export default function setPresenterInPodReqMsg(credentials) { +export default function setPresenterInPodReqMsg(credentials) { // TODO-- switch to meetingId, etc const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'SetPresenterInPodReqMsg'; diff --git a/bigbluebutton-html5/imports/api/presentation-pods/server/publishers.js b/bigbluebutton-html5/imports/api/presentation-pods/server/publishers.js index 908c10bccdfbd361c8f929dc4e57de5fff7a0c1f..439b47e22f961d5368536be1d332e2e6d8ff3664 100644 --- a/bigbluebutton-html5/imports/api/presentation-pods/server/publishers.js +++ b/bigbluebutton-html5/imports/api/presentation-pods/server/publishers.js @@ -1,16 +1,14 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import PresentationPods from '/imports/api/presentation-pods'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -function presentationPods(credentials) { - const { meetingId, requesterUserId, requesterToken } = credentials; - - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); - - Logger.debug(`Publishing presentation-pods for ${meetingId} ${requesterUserId} ${requesterToken}`); +function presentationPods() { + if (!this.userId) { + return PresentationPods.find({ meetingId: '' }); + } + const { meetingId, requesterUserId } = extractCredentials(this.userId); + Logger.debug(`Publishing presentation-pods for ${meetingId} ${requesterUserId}`); return PresentationPods.find({ meetingId }); } diff --git a/bigbluebutton-html5/imports/api/presentation-pods/server/utils/isPodPresenter.js b/bigbluebutton-html5/imports/api/presentation-pods/server/utils/isPodPresenter.js deleted file mode 100755 index 48cfdc3e53a2e67a8735c842c94b6db8d6f2fcd8..0000000000000000000000000000000000000000 --- a/bigbluebutton-html5/imports/api/presentation-pods/server/utils/isPodPresenter.js +++ /dev/null @@ -1,9 +0,0 @@ -import { Slides } from '/imports/api/slides'; -import PresentationPods from '/imports/api/presentation-pods'; - -export default function isPodPresenter(meetingId, whiteboardId, userId) { - const slide = Slides.findOne({ meetingId, id: whiteboardId }); - const pod = PresentationPods.findOne({ meetingId, podId: slide.podId }); - - return pod.currentPresenterId === userId; -} diff --git a/bigbluebutton-html5/imports/api/presentation-upload-token/server/methods/requestPresentationUploadToken.js b/bigbluebutton-html5/imports/api/presentation-upload-token/server/methods/requestPresentationUploadToken.js index ae0efc36329b6feac8d36179f07e7104c2f38ba3..b01937dea06bd8185c0ec961375ef9dd1f7e965d 100644 --- a/bigbluebutton-html5/imports/api/presentation-upload-token/server/methods/requestPresentationUploadToken.js +++ b/bigbluebutton-html5/imports/api/presentation-upload-token/server/methods/requestPresentationUploadToken.js @@ -1,15 +1,13 @@ import RedisPubSub from '/imports/startup/server/redis'; import { check } from 'meteor/check'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function requestPresentationUploadToken(credentials, podId, filename) { +export default function requestPresentationUploadToken(podId, filename) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'PresentationUploadTokenReqMsg'; - const { meetingId, requesterUserId } = credentials; - - check(meetingId, String); - check(requesterUserId, String); + const { meetingId, requesterUserId } = extractCredentials(this.userId); check(podId, String); check(filename, String); diff --git a/bigbluebutton-html5/imports/api/presentation-upload-token/server/methods/setUsedToken.js b/bigbluebutton-html5/imports/api/presentation-upload-token/server/methods/setUsedToken.js index a09c9d7c1f658c0198c7042a0d68f6e98450666c..8bb0f725c97c121d0c3a6a1a64df61782196c53a 100644 --- a/bigbluebutton-html5/imports/api/presentation-upload-token/server/methods/setUsedToken.js +++ b/bigbluebutton-html5/imports/api/presentation-upload-token/server/methods/setUsedToken.js @@ -1,12 +1,9 @@ import PresentationUploadToken from '/imports/api/presentation-upload-token'; import Logger from '/imports/startup/server/logger'; -import { check } from 'meteor/check'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function setUsedToken(credentials, authzToken) { - const { meetingId, requesterUserId, requesterToken } = credentials; - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); +export default function setUsedToken(authzToken) { + const { meetingId, requesterUserId } = extractCredentials(this.userId); const payload = { $set: { diff --git a/bigbluebutton-html5/imports/api/presentation-upload-token/server/publishers.js b/bigbluebutton-html5/imports/api/presentation-upload-token/server/publishers.js index 50edcb12cf1143629cefde6f3889079356727879..ffd1d5f49626db48b753ee6e4a0cf093c83cd845 100644 --- a/bigbluebutton-html5/imports/api/presentation-upload-token/server/publishers.js +++ b/bigbluebutton-html5/imports/api/presentation-upload-token/server/publishers.js @@ -2,13 +2,13 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import PresentationUploadToken from '/imports/api/presentation-upload-token'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -Meteor.publish('presentation-upload-token', (credentials, podId, filename) => { - const { meetingId, requesterUserId, requesterToken } = credentials; - - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); +function presentationUploadToken(podId, filename) { + if (!this.userId) { + return PresentationUploadToken.find({ meetingId: '' }); + } + const { meetingId, requesterUserId } = extractCredentials(this.userId); check(podId, String); check(filename, String); @@ -19,7 +19,14 @@ Meteor.publish('presentation-upload-token', (credentials, podId, filename) => { filename, }; - Logger.debug(`Publishing PresentationUploadToken for ${meetingId} ${requesterUserId} ${requesterToken}`); + Logger.debug(`Publishing PresentationUploadToken for ${meetingId} ${requesterUserId}`); return PresentationUploadToken.find(selector); -}); +} + +function publish(...args) { + const boundPresentationUploadToken = presentationUploadToken.bind(this); + return boundPresentationUploadToken(...args); +} + +Meteor.publish('presentation-upload-token', publish); diff --git a/bigbluebutton-html5/imports/api/presentations/server/methods/removePresentation.js b/bigbluebutton-html5/imports/api/presentations/server/methods/removePresentation.js index 259fa4d5c6b78fdaa85120d303a6025989f11599..a4169aa0f3b064e0ca074c567830a62db862edf6 100644 --- a/bigbluebutton-html5/imports/api/presentations/server/methods/removePresentation.js +++ b/bigbluebutton-html5/imports/api/presentations/server/methods/removePresentation.js @@ -1,30 +1,17 @@ import RedisPubSub from '/imports/startup/server/redis'; import { check } from 'meteor/check'; -import Presentations from '/imports/api/presentations'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function removePresentation(credentials, presentationId, podId) { - const PRESENTATION_CONFIG = Meteor.settings.public.presentation; +export default function removePresentation(presentationId, podId) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'RemovePresentationPubMsg'; - const { meetingId, requesterUserId } = credentials; + const { meetingId, requesterUserId } = extractCredentials(this.userId); - check(meetingId, String); - check(requesterUserId, String); check(presentationId, String); check(podId, String); - const presentationToDelete = Presentations.findOne({ - meetingId, - id: presentationId, - podId, - }); - - if (presentationToDelete.name === PRESENTATION_CONFIG.defaultPresentationFile) { - throw new Meteor.Error('not-allowed', 'You are not allowed to remove the default slide'); - } - const payload = { presentationId, podId, diff --git a/bigbluebutton-html5/imports/api/presentations/server/methods/setPresentation.js b/bigbluebutton-html5/imports/api/presentations/server/methods/setPresentation.js index 164370e313c4760d713d246a1395049f8b548456..ebe15cbe0daeac955a6c3ad6805c968dacea8af2 100644 --- a/bigbluebutton-html5/imports/api/presentations/server/methods/setPresentation.js +++ b/bigbluebutton-html5/imports/api/presentations/server/methods/setPresentation.js @@ -1,39 +1,20 @@ import RedisPubSub from '/imports/startup/server/redis'; import { check } from 'meteor/check'; -import Presentations from '/imports/api/presentations'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function setPresentation(credentials, presentationId, podId) { +export default function setPresentation(presentationId, podId) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'SetCurrentPresentationPubMsg'; + const { meetingId, requesterUserId } = extractCredentials(this.userId); - const { meetingId, requesterUserId } = credentials; - - check(meetingId, String); - check(requesterUserId, String); check(presentationId, String); check(podId, String); - const currentPresentation = Presentations.findOne({ - meetingId, - id: presentationId, + const payload = { + presentationId, podId, - }); - - if (currentPresentation) { - if (currentPresentation.current) { - return Promise.resolve(); - } - - const payload = { - presentationId, - podId, - }; - - return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, requesterUserId, payload); - } + }; - // did not find presentation with such id. abandon - // return Promise.resolve(); // will close the uploading modal - throw new Meteor.Error('presentation-not-found', `Did not find a presentation with id ${presentationId} in method setPresentation`); + return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, requesterUserId, payload); } diff --git a/bigbluebutton-html5/imports/api/presentations/server/methods/setPresentationDownloadable.js b/bigbluebutton-html5/imports/api/presentations/server/methods/setPresentationDownloadable.js index edcbcd6c9e7b9d70774ec377f5b889c9d921f2c6..5d51af14f071e5f8023333c76181551d899f8f10 100644 --- a/bigbluebutton-html5/imports/api/presentations/server/methods/setPresentationDownloadable.js +++ b/bigbluebutton-html5/imports/api/presentations/server/methods/setPresentationDownloadable.js @@ -1,14 +1,14 @@ import RedisPubSub from '/imports/startup/server/redis'; import { check } from 'meteor/check'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function setPresentationDownloadable(credentials, presentationId, downloadable) { +export default function setPresentationDownloadable(presentationId, downloadable) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'SetPresentationDownloadablePubMsg'; - const { meetingId, requesterUserId } = credentials; + const { meetingId, requesterUserId } = extractCredentials(this.userId); - check(meetingId, String); check(downloadable, Boolean); check(presentationId, String); diff --git a/bigbluebutton-html5/imports/api/presentations/server/publishers.js b/bigbluebutton-html5/imports/api/presentations/server/publishers.js index 3839c58c984456ad63073a85089baa1c355085e4..3fb5e0e5bd9d0164c5961f007fa921743311cf48 100644 --- a/bigbluebutton-html5/imports/api/presentations/server/publishers.js +++ b/bigbluebutton-html5/imports/api/presentations/server/publishers.js @@ -1,16 +1,15 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import Presentations from '/imports/api/presentations'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -function presentations(credentials) { - const { meetingId, requesterUserId, requesterToken } = credentials; +function presentations() { + if (!this.userId) { + return Presentations.find({ meetingId: '' }); + } + const { meetingId, requesterUserId } = extractCredentials(this.userId); - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); - - Logger.debug(`Publishing Presentations for ${meetingId} ${requesterUserId} ${requesterToken}`); + Logger.debug(`Publishing Presentations for ${meetingId} ${requesterUserId}`); return Presentations.find({ meetingId }); } diff --git a/bigbluebutton-html5/imports/api/screenshare/server/publishers.js b/bigbluebutton-html5/imports/api/screenshare/server/publishers.js index 5ffc1b185a6cd29c088b41e2915beed0c721a327..8042a790c641170e16bb35025c747e160ff2d794 100644 --- a/bigbluebutton-html5/imports/api/screenshare/server/publishers.js +++ b/bigbluebutton-html5/imports/api/screenshare/server/publishers.js @@ -1,13 +1,13 @@ import Screenshare from '/imports/api/screenshare'; import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -function screenshare(credentials) { - const { meetingId, requesterUserId } = credentials; - - check(meetingId, String); - check(requesterUserId, String); +function screenshare() { + if (!this.userId) { + return Screenshare.find({ meetingId: '' }); + } + const { meetingId, requesterUserId } = extractCredentials(this.userId); Logger.debug(`Publishing Screenshare for ${meetingId} ${requesterUserId}`); diff --git a/bigbluebutton-html5/imports/api/slides/server/methods/switchSlide.js b/bigbluebutton-html5/imports/api/slides/server/methods/switchSlide.js index b9e32fb6857a4074f7a0c345d17ac48339e72c04..2251095ced32366f724e021d6ebe674c7b97bbe5 100755 --- a/bigbluebutton-html5/imports/api/slides/server/methods/switchSlide.js +++ b/bigbluebutton-html5/imports/api/slides/server/methods/switchSlide.js @@ -3,18 +3,14 @@ import { Slides } from '/imports/api/slides'; import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function switchSlide(credentials, slideNumber, podId) { +export default function switchSlide(slideNumber, podId) { // TODO-- send presentationId and SlideId const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'SetCurrentPagePubMsg'; - - const { meetingId, requesterUserId, requesterToken } = credentials; - - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); + const { meetingId, requesterUserId } = extractCredentials(this.userId); check(slideNumber, Number); const selector = { diff --git a/bigbluebutton-html5/imports/api/slides/server/methods/zoomSlide.js b/bigbluebutton-html5/imports/api/slides/server/methods/zoomSlide.js index b4255e808380b98c7238d6a7a80c930a2e0ba1ab..3d247742f3a22009c5b64ad5130c6a94e04c04cc 100755 --- a/bigbluebutton-html5/imports/api/slides/server/methods/zoomSlide.js +++ b/bigbluebutton-html5/imports/api/slides/server/methods/zoomSlide.js @@ -1,20 +1,15 @@ import Presentations from '/imports/api/presentations'; import { Slides } from '/imports/api/slides'; import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function zoomSlide(credentials, slideNumber, podId, widthRatio, heightRatio, x, y) { +export default function zoomSlide(slideNumber, podId, widthRatio, heightRatio, x, y) { // TODO-- send presentationId and SlideId const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'ResizeAndMovePagePubMsg'; - - const { meetingId, requesterUserId, requesterToken } = credentials; - - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); + const { meetingId, requesterUserId } = extractCredentials(this.userId); const selector = { meetingId, diff --git a/bigbluebutton-html5/imports/api/slides/server/publishers.js b/bigbluebutton-html5/imports/api/slides/server/publishers.js index 273c4b60cf9953fad24ab0c54dd30efa9cb41881..99895cfbb02feedc40855e4696e31dc3129f3439 100755 --- a/bigbluebutton-html5/imports/api/slides/server/publishers.js +++ b/bigbluebutton-html5/imports/api/slides/server/publishers.js @@ -1,16 +1,14 @@ import { Slides, SlidePositions } from '/imports/api/slides'; import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -function slides(credentials) { - const { meetingId, requesterUserId, requesterToken } = credentials; - - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); - - Logger.debug(`Publishing Slides for ${meetingId} ${requesterUserId} ${requesterToken}`); +function slides() { + if (!this.userId) { + return Slides.find({ meetingId: '' }); + } + const { meetingId, requesterUserId } = extractCredentials(this.userId); + Logger.debug(`Publishing Slides for ${meetingId} ${requesterUserId}`); return Slides.find({ meetingId }); } @@ -22,14 +20,13 @@ function publish(...args) { Meteor.publish('slides', publish); -function slidePositions(credentials) { - const { meetingId, requesterUserId, requesterToken } = credentials; - - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); +function slidePositions() { + if (!this.userId) { + return SlidePositions.find({ meetingId: '' }); + } + const { meetingId, requesterUserId } = extractCredentials(this.userId); - Logger.debug(`Publishing SlidePositions for ${meetingId} ${requesterUserId} ${requesterToken}`); + Logger.debug(`Publishing SlidePositions for ${meetingId} ${requesterUserId}`); return SlidePositions.find({ meetingId }); } diff --git a/bigbluebutton-html5/imports/api/users-infos/server/methods/removeUserInformation.js b/bigbluebutton-html5/imports/api/users-infos/server/methods/removeUserInformation.js index 3328b07c5b0a27990e19736b3c85b0124c534f86..5201a8c0a0b58938a0686600241cdbfb4282d735 100644 --- a/bigbluebutton-html5/imports/api/users-infos/server/methods/removeUserInformation.js +++ b/bigbluebutton-html5/imports/api/users-infos/server/methods/removeUserInformation.js @@ -1,7 +1,7 @@ import UserInfos from '/imports/api/users-infos'; import Logger from '/imports/startup/server/logger'; -export default function removeUserInformation(credentials, meetingId, requesterUserId) { +export default function removeUserInformation(meetingId, requesterUserId) { const selector = { meetingId, requesterUserId, diff --git a/bigbluebutton-html5/imports/api/users-infos/server/methods/requestUserInformation.js b/bigbluebutton-html5/imports/api/users-infos/server/methods/requestUserInformation.js index 4d93c99c2615a9f0fb6e48248be1e14880fc2535..ed89eedd8e6b120438149891aeaa8180d717a502 100644 --- a/bigbluebutton-html5/imports/api/users-infos/server/methods/requestUserInformation.js +++ b/bigbluebutton-html5/imports/api/users-infos/server/methods/requestUserInformation.js @@ -1,16 +1,14 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function getUserInformation(credentials, externalUserId) { +export default function getUserInformation(externalUserId) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toThirdParty; const EVENT_NAME = 'LookUpUserReqMsg'; - const { meetingId, requesterUserId } = credentials; - - check(meetingId, String); - check(requesterUserId, String); + const { meetingId, requesterUserId } = extractCredentials(this.userId); check(externalUserId, String); const payload = { diff --git a/bigbluebutton-html5/imports/api/users-infos/server/publishers.js b/bigbluebutton-html5/imports/api/users-infos/server/publishers.js index 6eed7b35c38ede6bd6a17eaa711a61fd9cd5db17..1205c00e6fcc987a3fac6289a535cb4d6824104b 100644 --- a/bigbluebutton-html5/imports/api/users-infos/server/publishers.js +++ b/bigbluebutton-html5/imports/api/users-infos/server/publishers.js @@ -1,13 +1,13 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import UserInfos from '/imports/api/users-infos'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -function userInfos(credentials) { - const { meetingId, requesterUserId } = credentials; - - check(meetingId, String); - check(requesterUserId, String); +function userInfos() { + if (!this.userId) { + return UserInfos.find({ meetingId: '' }); + } + const { meetingId, requesterUserId } = extractCredentials(this.userId); Logger.debug(`Publishing user infos requested by user=${requesterUserId}`); diff --git a/bigbluebutton-html5/imports/api/users-settings/server/methods/addUserSettings.js b/bigbluebutton-html5/imports/api/users-settings/server/methods/addUserSettings.js index 4706d9f9dbe4da8ce25ed65ec3957abddcd84b86..c3b7d36d5a979ed4d8632404eda361e50fae1527 100644 --- a/bigbluebutton-html5/imports/api/users-settings/server/methods/addUserSettings.js +++ b/bigbluebutton-html5/imports/api/users-settings/server/methods/addUserSettings.js @@ -73,9 +73,7 @@ function valueParser(val) { } } -export default function addUserSettings(credentials, meetingId, userId, settings) { - check(meetingId, String); - check(userId, String); +export default function addUserSettings(meetingId, userId, settings) { check(settings, [Object]); let parameters = {}; diff --git a/bigbluebutton-html5/imports/api/users-settings/server/publishers.js b/bigbluebutton-html5/imports/api/users-settings/server/publishers.js index 408b10f1c04065f133b8402f4c7bfc7624bee923..0b772099b42c8eb1007a2387a14a0d1d747f4194 100644 --- a/bigbluebutton-html5/imports/api/users-settings/server/publishers.js +++ b/bigbluebutton-html5/imports/api/users-settings/server/publishers.js @@ -1,13 +1,13 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import UserSettings from '/imports/api/users-settings'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -function userSettings(credentials) { - const { meetingId, requesterUserId } = credentials; - - check(meetingId, String); - check(requesterUserId, String); +function userSettings() { + if (!this.userId) { + return UserSettings.find({ meetingId: '' }); + } + const { meetingId, requesterUserId } = extractCredentials(this.userId); Logger.debug(`Publishing user settings for user=${requesterUserId}`); diff --git a/bigbluebutton-html5/imports/api/users/server/methods/userJoin.js b/bigbluebutton-html5/imports/api/users/server/handlers/userJoin.js similarity index 78% rename from bigbluebutton-html5/imports/api/users/server/methods/userJoin.js rename to bigbluebutton-html5/imports/api/users/server/handlers/userJoin.js index dc68d83f55336236207e45b49bd5235b43bc704c..93ecd8bdcf0cf0f14d65a8903b6503dc01e374a6 100644 --- a/bigbluebutton-html5/imports/api/users/server/methods/userJoin.js +++ b/bigbluebutton-html5/imports/api/users/server/handlers/userJoin.js @@ -8,10 +8,6 @@ export default function userJoin(meetingId, userId, authToken) { const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'UserJoinMeetingReqMsg'; - Logger.info(`User='${userId}' is joining meeting='${meetingId}' authToken='${authToken}' pt1`); - - check(meetingId, String); - check(userId, String); check(authToken, String); const payload = { @@ -20,7 +16,7 @@ export default function userJoin(meetingId, userId, authToken) { clientType: 'HTML5', }; - Logger.info(`User='${userId}' is joining meeting='${meetingId}' authToken='${authToken}' pt2`); + Logger.info(`User='${userId}' is joining meeting='${meetingId}' authToken='${authToken}'`); return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, userId, payload); } diff --git a/bigbluebutton-html5/imports/api/users/server/handlers/validateAuthToken.js b/bigbluebutton-html5/imports/api/users/server/handlers/validateAuthToken.js index e60d924dd0adb6ab4cd159c640533f33b600b130..f8a04154b10d575dc24f1334b0085acaabfaea4b 100644 --- a/bigbluebutton-html5/imports/api/users/server/handlers/validateAuthToken.js +++ b/bigbluebutton-html5/imports/api/users/server/handlers/validateAuthToken.js @@ -1,7 +1,7 @@ import { check } from 'meteor/check'; import Logger from '/imports/startup/server/logger'; import Users from '/imports/api/users'; -import userJoin from '../methods/userJoin'; +import userJoin from './userJoin'; const clearOtherSessions = (sessionUserId, current = false) => { const serverSessions = Meteor.server.sessions; diff --git a/bigbluebutton-html5/imports/api/users/server/methods/assignPresenter.js b/bigbluebutton-html5/imports/api/users/server/methods/assignPresenter.js index add2afe1d06beac5bdc405a88f64344d849f3084..d8b5da899ae0a05f8358217b5c6b072900118ee1 100644 --- a/bigbluebutton-html5/imports/api/users/server/methods/assignPresenter.js +++ b/bigbluebutton-html5/imports/api/users/server/methods/assignPresenter.js @@ -3,16 +3,14 @@ import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; import Logger from '/imports/startup/server/logger'; import Users from '/imports/api/users'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function assignPresenter(credentials, userId) { +export default function assignPresenter(userId) { // TODO-- send username from client side const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'AssignPresenterReqMsg'; - const { meetingId, requesterUserId } = credentials; - - check(meetingId, String); - check(requesterUserId, String); + const { meetingId, requesterUserId } = extractCredentials(this.userId); check(userId, String); const User = Users.findOne({ diff --git a/bigbluebutton-html5/imports/api/users/server/methods/changeRole.js b/bigbluebutton-html5/imports/api/users/server/methods/changeRole.js index beff64791c4a9654e1c0213050b1ad43b41d121c..f45abca3887de2dd6f7ea5d777f73313c46bca23 100644 --- a/bigbluebutton-html5/imports/api/users/server/methods/changeRole.js +++ b/bigbluebutton-html5/imports/api/users/server/methods/changeRole.js @@ -2,36 +2,25 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; import Logger from '/imports/startup/server/logger'; -import Users from '/imports/api/users'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function changeRole(credentials, userId, role) { +export default function changeRole(userId, role) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'ChangeUserRoleCmdMsg'; - const { meetingId, requesterUserId } = credentials; + const { meetingId, requesterUserId } = extractCredentials(this.userId); - check(meetingId, String); - check(requesterUserId, String); check(userId, String); check(role, String); - const User = Users.findOne({ - meetingId, - userId, - }); - - if (!User) { - throw new Meteor.Error('user-not-found', `You need a valid user to be able to set '${role}'`); - } - const payload = { userId, role, changedBy: requesterUserId, }; - Logger.verbose(`User '${userId}' setted as '${role} role by '${requesterUserId}' from meeting '${meetingId}'`); + Logger.verbose(`User '${userId}' set as '${role} role by '${requesterUserId}' from meeting '${meetingId}'`); return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, requesterUserId, payload); } diff --git a/bigbluebutton-html5/imports/api/users/server/methods/removeUser.js b/bigbluebutton-html5/imports/api/users/server/methods/removeUser.js index 80d90ec221d9a27e1e9ba862d8c07cf592ea9a47..afe41d6f9f83c3e34a23dd0932a67080b9bb77cc 100644 --- a/bigbluebutton-html5/imports/api/users/server/methods/removeUser.js +++ b/bigbluebutton-html5/imports/api/users/server/methods/removeUser.js @@ -1,22 +1,21 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function removeUser(credentials, userId) { +export default function removeUser(userId) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'EjectUserFromMeetingCmdMsg'; - const { requesterUserId, meetingId } = credentials; + const { meetingId, requesterUserId: ejectedBy } = extractCredentials(this.userId); - check(meetingId, String); - check(requesterUserId, String); check(userId, String); const payload = { userId, - ejectedBy: requesterUserId, + ejectedBy, }; - return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, requesterUserId, payload); + return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, ejectedBy, payload); } diff --git a/bigbluebutton-html5/imports/api/users/server/methods/setEmojiStatus.js b/bigbluebutton-html5/imports/api/users/server/methods/setEmojiStatus.js index c63e65ed058183e52592ab45f7ca6adfc6bc3c3a..5cea8279e734848adde14f98a9edd5ea001e87d7 100644 --- a/bigbluebutton-html5/imports/api/users/server/methods/setEmojiStatus.js +++ b/bigbluebutton-html5/imports/api/users/server/methods/setEmojiStatus.js @@ -2,16 +2,15 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function setEmojiStatus(credentials, userId, status) { +export default function setEmojiStatus(userId, status) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'ChangeUserEmojiCmdMsg'; - const { meetingId, requesterUserId } = credentials; + const { meetingId, requesterUserId } = extractCredentials(this.userId); - check(meetingId, String); - check(requesterUserId, String); check(userId, String); const payload = { diff --git a/bigbluebutton-html5/imports/api/users/server/methods/setUserEffectiveConnectionType.js b/bigbluebutton-html5/imports/api/users/server/methods/setUserEffectiveConnectionType.js index fd6a632d90cfb6425b9d6d661558a94c1f92a79f..6c1242ee4537b9b78d0793a2184c01a8ef340a5f 100644 --- a/bigbluebutton-html5/imports/api/users/server/methods/setUserEffectiveConnectionType.js +++ b/bigbluebutton-html5/imports/api/users/server/methods/setUserEffectiveConnectionType.js @@ -2,17 +2,15 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; import setEffectiveConnectionType from '../modifiers/setUserEffectiveConnectionType'; -export default function setUserEffectiveConnectionType(credentials, effectiveConnectionType) { +export default function setUserEffectiveConnectionType(effectiveConnectionType) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'ChangeUserEffectiveConnectionMsg'; + const { meetingId, requesterUserId } = extractCredentials(this.userId); - const { meetingId, requesterUserId } = credentials; - - check(meetingId, String); - check(requesterUserId, String); check(effectiveConnectionType, String); const payload = { diff --git a/bigbluebutton-html5/imports/api/users/server/methods/toggleUserLock.js b/bigbluebutton-html5/imports/api/users/server/methods/toggleUserLock.js index 0919194b9261f371210f5981ea3fdca69be95476..f13aa323f7d8502a404c696d62a07291fe21a593 100644 --- a/bigbluebutton-html5/imports/api/users/server/methods/toggleUserLock.js +++ b/bigbluebutton-html5/imports/api/users/server/methods/toggleUserLock.js @@ -2,15 +2,15 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function toggleUserLock(credentials, userId, lock) { +export default function toggleUserLock(userId, lock) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'LockUserInMeetingCmdMsg'; - const { meetingId, requesterUserId: lockedBy } = credentials; + const { meetingId, requesterUserId: lockedBy } = extractCredentials(this.userId); - check(meetingId, String); check(lockedBy, String); check(userId, String); check(lock, Boolean); diff --git a/bigbluebutton-html5/imports/api/users/server/methods/userActivitySign.js b/bigbluebutton-html5/imports/api/users/server/methods/userActivitySign.js index d4ac0f1b8847f9abaccfeaa3f605470bbcee1229..16642f732bbcdfcc9b147b298f526b926c35493a 100644 --- a/bigbluebutton-html5/imports/api/users/server/methods/userActivitySign.js +++ b/bigbluebutton-html5/imports/api/users/server/methods/userActivitySign.js @@ -1,19 +1,14 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import Users from '/imports/api/users'; import RedisPubSub from '/imports/startup/server/redis'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function userActivitySign(credentials) { +export default function userActivitySign() { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'UserActivitySignCmdMsg'; - - const { meetingId, requesterUserId: userId } = credentials; - - check(meetingId, String); - check(userId, String); - + const { meetingId, requesterUserId: userId } = extractCredentials(this.userId); const payload = { userId, }; @@ -28,7 +23,7 @@ export default function userActivitySign(credentials) { }, }; - Users.update(selector, modifier); + Users.update(selector, modifier); // TODO-- we should move this to a modifier Logger.info(`User ${userId} sent a activity sign for meeting ${meetingId}`); diff --git a/bigbluebutton-html5/imports/api/users/server/methods/userLeaving.js b/bigbluebutton-html5/imports/api/users/server/methods/userLeaving.js index 321689b3fd6200352170816864b6ecf67479ad6e..9c21e9be7912a8f253cbdd1b73fceeacbce6391b 100755 --- a/bigbluebutton-html5/imports/api/users/server/methods/userLeaving.js +++ b/bigbluebutton-html5/imports/api/users/server/methods/userLeaving.js @@ -4,15 +4,11 @@ import RedisPubSub from '/imports/startup/server/redis'; import Logger from '/imports/startup/server/logger'; import Users from '/imports/api/users'; -export default function userLeaving(credentials, userId, connectionId) { +export default function userLeaving(meetingId, userId, connectionId) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'UserLeaveReqMsg'; - const { meetingId, requesterUserId } = credentials; - - check(meetingId, String); - check(requesterUserId, String); check(userId, String); const selector = { @@ -37,5 +33,5 @@ export default function userLeaving(credentials, userId, connectionId) { }; Logger.info(`User '${userId}' is leaving meeting '${meetingId}'`); - return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, requesterUserId, payload); + return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, userId, payload); } diff --git a/bigbluebutton-html5/imports/api/users/server/methods/userLeftMeeting.js b/bigbluebutton-html5/imports/api/users/server/methods/userLeftMeeting.js index 4723ba94e51538edaaa9ada00af9a694d1fcc8a9..eb198b5f88a688a5860bee76858b6b112615888f 100644 --- a/bigbluebutton-html5/imports/api/users/server/methods/userLeftMeeting.js +++ b/bigbluebutton-html5/imports/api/users/server/methods/userLeftMeeting.js @@ -1,16 +1,10 @@ -import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import Logger from '/imports/startup/server/logger'; import Users from '/imports/api/users'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function userLeftMeeting(credentials) { - const { - meetingId, - requesterUserId, - } = credentials; - - check(meetingId, String); - check(requesterUserId, String); +export default function userLeftMeeting() { // TODO-- spread the code to method/modifier/handler + // so we don't update the db in a method + const { meetingId, requesterUserId } = extractCredentials(this.userId); const selector = { meetingId, diff --git a/bigbluebutton-html5/imports/api/users/server/methods/validateAuthToken.js b/bigbluebutton-html5/imports/api/users/server/methods/validateAuthToken.js index 136c00db1a8d5917d3b9547cc2a1f4579a8cdedc..e01b6ad348fde23e60eea7cf571b3938c4739286 100644 --- a/bigbluebutton-html5/imports/api/users/server/methods/validateAuthToken.js +++ b/bigbluebutton-html5/imports/api/users/server/methods/validateAuthToken.js @@ -1,23 +1,16 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; import Logger from '/imports/startup/server/logger'; import Users from '/imports/api/users'; import createDummyUser from '../modifiers/createDummyUser'; import setConnectionIdAndAuthToken from '../modifiers/setConnectionIdAndAuthToken'; -export default function validateAuthToken(credentials) { +export default function validateAuthToken(meetingId, requesterUserId, requesterToken) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'ValidateAuthTokenReqMsg'; - const { meetingId, requesterUserId, requesterToken } = credentials; - - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); - - const sessionId = `${meetingId}-${requesterUserId}`; + const sessionId = `${meetingId}--${requesterUserId}`; this.setUserId(sessionId); const User = Users.findOne({ diff --git a/bigbluebutton-html5/imports/api/users/server/publishers.js b/bigbluebutton-html5/imports/api/users/server/publishers.js index 1751a2517718cdb07a2611a39a9a538c67908275..2e342ec03f452511df0991cc7de77ff472c9985c 100644 --- a/bigbluebutton-html5/imports/api/users/server/publishers.js +++ b/bigbluebutton-html5/imports/api/users/server/publishers.js @@ -5,16 +5,23 @@ import { check } from 'meteor/check'; import Logger from '/imports/startup/server/logger'; import userLeaving from './methods/userLeaving'; +import { extractCredentials } from '/imports/api/common/server/helpers'; const ROLE_MODERATOR = Meteor.settings.public.user.role_moderator; -Meteor.publish('current-user', function currentUserPub(credentials) { - const { meetingId, requesterUserId, requesterToken } = credentials; +function currentUser() { + if (!this.userId) { + return Users.find({ meetingId: '' }); + } + const { meetingId, requesterUserId } = extractCredentials(this.userId); + + check(meetingId, String); + check(requesterUserId, String); const connectionId = this.connection.id; const onCloseConnection = Meteor.bindEnvironment(() => { try { - userLeaving(credentials, requesterUserId, connectionId); + userLeaving(meetingId, requesterUserId, connectionId); } catch (e) { Logger.error(`Exception while executing userLeaving: ${e}`); } @@ -22,35 +29,33 @@ Meteor.publish('current-user', function currentUserPub(credentials) { this._session.socket.on('close', _.debounce(onCloseConnection, 100)); - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); - const selector = { meetingId, userId: requesterUserId, - authToken: requesterToken, }; const options = { fields: { user: false, + authToken: false, // Not asking for authToken from client side but also not exposing it }, }; return Users.find(selector, options); -}); +} -function users(credentials, isModerator = false) { - const { - meetingId, - requesterUserId, - requesterToken, - } = credentials; +function publishCurrentUser(...args) { + const boundUsers = currentUser.bind(this); + return boundUsers(...args); +} - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); +Meteor.publish('current-user', publishCurrentUser); + +function users(isModerator = false) { + if (!this.userId) { + return Users.find({ meetingId: '' }); + } + const { meetingId, requesterUserId } = extractCredentials(this.userId); const selector = { $or: [ @@ -76,7 +81,7 @@ function users(credentials, isModerator = false) { }, }; - Logger.debug(`Publishing Users for ${meetingId} ${requesterUserId} ${requesterToken}`); + Logger.debug(`Publishing Users for ${meetingId} ${requesterUserId}`); return Users.find(selector, options); } diff --git a/bigbluebutton-html5/imports/api/video-streams/server/methods/userShareWebcam.js b/bigbluebutton-html5/imports/api/video-streams/server/methods/userShareWebcam.js index 2d7e51cb06c38e1896ccdbcace3488bc46629938..4b679293712923df7ae3a58630c03962792d2fb6 100644 --- a/bigbluebutton-html5/imports/api/video-streams/server/methods/userShareWebcam.js +++ b/bigbluebutton-html5/imports/api/video-streams/server/methods/userShareWebcam.js @@ -2,19 +2,16 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import Logger from '/imports/startup/server/logger'; import RedisPubSub from '/imports/startup/server/redis'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function userShareWebcam(credentials, stream) { +export default function userShareWebcam(stream) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'UserBroadcastCamStartMsg'; + const { meetingId, requesterUserId } = extractCredentials(this.userId); - const { meetingId, requesterUserId, requesterToken } = credentials; + Logger.info(`user sharing webcam: ${meetingId} ${requesterUserId}`); - Logger.info(' user sharing webcam: ', credentials); - - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); check(stream, String); // const actionName = 'joinVideo'; diff --git a/bigbluebutton-html5/imports/api/video-streams/server/methods/userUnshareWebcam.js b/bigbluebutton-html5/imports/api/video-streams/server/methods/userUnshareWebcam.js index 13f6609ee85bc09f9d9d111156cf4446fe5fed11..c04d863efdcdba50f0cebc19518c10673de41d3d 100644 --- a/bigbluebutton-html5/imports/api/video-streams/server/methods/userUnshareWebcam.js +++ b/bigbluebutton-html5/imports/api/video-streams/server/methods/userUnshareWebcam.js @@ -2,19 +2,16 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import Logger from '/imports/startup/server/logger'; import RedisPubSub from '/imports/startup/server/redis'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function userUnshareWebcam(credentials, stream) { +export default function userUnshareWebcam(stream) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'UserBroadcastCamStopMsg'; + const { meetingId, requesterUserId } = extractCredentials(this.userId); - const { meetingId, requesterUserId, requesterToken } = credentials; + Logger.info(`user unsharing webcam: ${meetingId} ${requesterUserId}`); - Logger.info(' user unsharing webcam: ', credentials); - - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); check(stream, String); // const actionName = 'joinVideo'; diff --git a/bigbluebutton-html5/imports/api/video-streams/server/publisher.js b/bigbluebutton-html5/imports/api/video-streams/server/publisher.js index b471bbbe396321eae1f52547e467cbfcdf475fe4..046a054ff2406fdbb78b9a8379c5d06050209f2e 100644 --- a/bigbluebutton-html5/imports/api/video-streams/server/publisher.js +++ b/bigbluebutton-html5/imports/api/video-streams/server/publisher.js @@ -1,14 +1,13 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import Logger from '/imports/startup/server/logger'; import VideoStreams from '/imports/api/video-streams'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -function videoStreams(credentials) { - const { meetingId, requesterUserId, requesterToken } = credentials; - - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); +function videoStreams() { + if (!this.userId) { + return VideoStreams.find({ meetingId: '' }); + } + const { meetingId } = extractCredentials(this.userId); Logger.debug(`video users of meeting id=${meetingId}`); diff --git a/bigbluebutton-html5/imports/api/voice-users/server/methods.js b/bigbluebutton-html5/imports/api/voice-users/server/methods.js index 975770e43fdadd32ae7ffd64dc5a8c3143162ebe..e78ab55dc740b968d478da1705c4429481a19256 100755 --- a/bigbluebutton-html5/imports/api/voice-users/server/methods.js +++ b/bigbluebutton-html5/imports/api/voice-users/server/methods.js @@ -7,7 +7,6 @@ import ejectUserFromVoice from './methods/ejectUserFromVoice'; Meteor.methods({ listenOnlyToggle, - toggleSelfVoice: (credentials) => { muteToggle(credentials, credentials.requesterUserId); }, toggleVoice: muteToggle, muteAllUsers: muteAllToggle, muteAllExceptPresenter: muteAllExceptPresenterToggle, diff --git a/bigbluebutton-html5/imports/api/voice-users/server/methods/ejectUserFromVoice.js b/bigbluebutton-html5/imports/api/voice-users/server/methods/ejectUserFromVoice.js index bc8fe6f20054cbb59ed1247923aa65583b1e5b89..1039a83d9234fa2e47cad612d963c64e8dc81ab7 100644 --- a/bigbluebutton-html5/imports/api/voice-users/server/methods/ejectUserFromVoice.js +++ b/bigbluebutton-html5/imports/api/voice-users/server/methods/ejectUserFromVoice.js @@ -1,16 +1,14 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function ejectUserFromVoice(credentials, userId) { +export default function ejectUserFromVoice(userId) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'EjectUserFromVoiceCmdMsg'; - const { requesterUserId, meetingId } = credentials; - - check(meetingId, String); - check(requesterUserId, String); + const { meetingId, requesterUserId } = extractCredentials(this.userId); check(userId, String); const payload = { diff --git a/bigbluebutton-html5/imports/api/voice-users/server/methods/listenOnlyToggle.js b/bigbluebutton-html5/imports/api/voice-users/server/methods/listenOnlyToggle.js index 365423ab698101ba45339d8eba7bb5f8a28deb29..c5ce88176a6d24b2ff757793e08033b3bdc31da1 100644 --- a/bigbluebutton-html5/imports/api/voice-users/server/methods/listenOnlyToggle.js +++ b/bigbluebutton-html5/imports/api/voice-users/server/methods/listenOnlyToggle.js @@ -4,15 +4,14 @@ import RedisPubSub from '/imports/startup/server/redis'; import Logger from '/imports/startup/server/logger'; import Meetings from '/imports/api/meetings'; import VoiceUsers from '/imports/api/voice-users'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function listenOnlyToggle(credentials, isJoining = true) { +export default function listenOnlyToggle(isJoining = true) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; - const { meetingId, requesterUserId } = credentials; + const { meetingId, requesterUserId } = extractCredentials(this.userId); - check(meetingId, String); - check(requesterUserId, String); check(isJoining, Boolean); let EVENT_NAME; diff --git a/bigbluebutton-html5/imports/api/voice-users/server/methods/muteAllExceptPresenterToggle.js b/bigbluebutton-html5/imports/api/voice-users/server/methods/muteAllExceptPresenterToggle.js index db73c7df61fd4c4dc6631c2fdd22a0bbcd7cdb78..c82e280d509f6d11b16d1514ce5a91101ed98f7f 100755 --- a/bigbluebutton-html5/imports/api/voice-users/server/methods/muteAllExceptPresenterToggle.js +++ b/bigbluebutton-html5/imports/api/voice-users/server/methods/muteAllExceptPresenterToggle.js @@ -1,17 +1,15 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; import Meetings from '/imports/api/meetings'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function muteAllExceptPresenterToggle(credentials) { +export default function muteAllExceptPresenterToggle() { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'MuteAllExceptPresentersCmdMsg'; - const { meetingId, requesterUserId } = credentials; + const { meetingId, requesterUserId } = extractCredentials(this.userId); - check(meetingId, String); - check(requesterUserId, String); const meeting = Meetings.findOne({ meetingId }); const toggleMeetingMuted = !meeting.voiceProp.muteOnStart; diff --git a/bigbluebutton-html5/imports/api/voice-users/server/methods/muteAllToggle.js b/bigbluebutton-html5/imports/api/voice-users/server/methods/muteAllToggle.js index 2d142dabef3b20539ceb683c762abc28fbe3867d..ecfd3433f91e48e54343f0967d45ada212b007a1 100755 --- a/bigbluebutton-html5/imports/api/voice-users/server/methods/muteAllToggle.js +++ b/bigbluebutton-html5/imports/api/voice-users/server/methods/muteAllToggle.js @@ -1,17 +1,15 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; import Meetings from '/imports/api/meetings'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function muteAllToggle(credentials) { +export default function muteAllToggle() { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'MuteMeetingCmdMsg'; - const { meetingId, requesterUserId } = credentials; + const { meetingId, requesterUserId } = extractCredentials(this.userId); - check(meetingId, String); - check(requesterUserId, String); const meeting = Meetings.findOne({ meetingId }); const toggleMeetingMuted = !meeting.voiceProp.muteOnStart; diff --git a/bigbluebutton-html5/imports/api/voice-users/server/methods/muteToggle.js b/bigbluebutton-html5/imports/api/voice-users/server/methods/muteToggle.js index be28a30199fa02f69b55a5534a9ca607f1a542f8..81d4ab92b91b483c7c20426ef50486ce516438ea 100644 --- a/bigbluebutton-html5/imports/api/voice-users/server/methods/muteToggle.js +++ b/bigbluebutton-html5/imports/api/voice-users/server/methods/muteToggle.js @@ -1,18 +1,16 @@ import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; +import { extractCredentials } from '/imports/api/common/server/helpers'; import RedisPubSub from '/imports/startup/server/redis'; import Users from '/imports/api/users'; import VoiceUsers from '/imports/api/voice-users'; -export default function muteToggle(credentials, userId) { +export default function muteToggle(uId) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'MuteUserCmdMsg'; - const { meetingId, requesterUserId } = credentials; - - check(meetingId, String); - check(requesterUserId, String); + const { meetingId, requesterUserId } = extractCredentials(this.userId); + const userToMute = uId || requesterUserId; const requester = Users.findOne({ meetingId, @@ -20,7 +18,7 @@ export default function muteToggle(credentials, userId) { }); const voiceUser = VoiceUsers.findOne({ - intId: userId, + intId: userToMute, }); if (!requester || !voiceUser) return; @@ -29,7 +27,7 @@ export default function muteToggle(credentials, userId) { if (listenOnly) return; const payload = { - userId, + userId: userToMute, mutedBy: requesterUserId, mute: !muted, }; diff --git a/bigbluebutton-html5/imports/api/voice-users/server/publishers.js b/bigbluebutton-html5/imports/api/voice-users/server/publishers.js index 22515c0708e3732cc40973aab49a9972ab9d41f8..cca405660072e15fbf437842103ed36b1534b3e0 100644 --- a/bigbluebutton-html5/imports/api/voice-users/server/publishers.js +++ b/bigbluebutton-html5/imports/api/voice-users/server/publishers.js @@ -1,13 +1,13 @@ import VoiceUsers from '/imports/api/voice-users'; import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -function voiceUser(credentials) { - const { meetingId, requesterUserId } = credentials; - - check(meetingId, String); - check(requesterUserId, String); +function voiceUser() { + if (!this.userId) { + return VoiceUsers.find({ meetingId: '' }); + } + const { meetingId, requesterUserId } = extractCredentials(this.userId); Logger.debug(`Publishing Voice User for ${meetingId} ${requesterUserId}`); diff --git a/bigbluebutton-html5/imports/api/whiteboard-multi-user/server/methods/changeWhiteboardAccess.js b/bigbluebutton-html5/imports/api/whiteboard-multi-user/server/methods/changeWhiteboardAccess.js index 5ceb031e29676cb89eb488a79f7c2b88eaf6b1b4..ffd3b1662695d00fec3c57a6a1d0474b538a06ee 100644 --- a/bigbluebutton-html5/imports/api/whiteboard-multi-user/server/methods/changeWhiteboardAccess.js +++ b/bigbluebutton-html5/imports/api/whiteboard-multi-user/server/methods/changeWhiteboardAccess.js @@ -1,17 +1,15 @@ import RedisPubSub from '/imports/startup/server/redis'; import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function changeWhiteboardAccess(credentials, multiUser, whiteboardId) { +export default function changeWhiteboardAccess(multiUser, whiteboardId) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'ModifyWhiteboardAccessPubMsg'; - const { meetingId, requesterUserId, requesterToken } = credentials; + const { meetingId, requesterUserId } = extractCredentials(this.userId); - check(meetingId, String); - check(requesterUserId, String); - check(requesterToken, String); check(multiUser, Boolean); check(whiteboardId, String); diff --git a/bigbluebutton-html5/imports/api/whiteboard-multi-user/server/publishers.js b/bigbluebutton-html5/imports/api/whiteboard-multi-user/server/publishers.js index 6047ac46d10d6daa6b250b38bff64aaea46ce40c..e8e8a8e4b14828f1c2f29e9ac191689cfac6f5f9 100644 --- a/bigbluebutton-html5/imports/api/whiteboard-multi-user/server/publishers.js +++ b/bigbluebutton-html5/imports/api/whiteboard-multi-user/server/publishers.js @@ -1,18 +1,20 @@ import WhiteboardMultiUser from '/imports/api/whiteboard-multi-user/'; import { Meteor } from 'meteor/meteor'; -import { check } from 'meteor/check'; import Logger from '/imports/startup/server/logger'; +import { extractCredentials } from '/imports/api/common/server/helpers'; -function whiteboardMultiUser(credentials) { - const { meetingId, requesterUserId, requesterToken } = credentials; +function whiteboardMultiUser() { + if (!this.userId) { + return WhiteboardMultiUser.find({ meetingId: '' }); + } + const { meetingId, requesterUserId } = extractCredentials(this.userId); - check(meetingId, String); - - Logger.debug(`Publishing whiteboard-multi-user for ${meetingId} ${requesterUserId} ${requesterToken}`); + Logger.debug(`Publishing whiteboard-multi-user for ${meetingId} ${requesterUserId}`); return WhiteboardMultiUser.find({ meetingId }); } + function publish(...args) { const boundMultiUser = whiteboardMultiUser.bind(this); return boundMultiUser(...args); diff --git a/bigbluebutton-html5/imports/startup/server/index.js b/bigbluebutton-html5/imports/startup/server/index.js index febdeaacff4334cc4fa1aea21e69d7c105a8d11a..119027be1e5d2c443f77b6071bb3b5c9f445b662 100755 --- a/bigbluebutton-html5/imports/startup/server/index.js +++ b/bigbluebutton-html5/imports/startup/server/index.js @@ -88,10 +88,9 @@ Meteor.startup(() => { Logger.info('Removing inactive users'); users.forEach((user) => { Logger.info(`Detected inactive user, userId:${user.userId}, meetingId:${user.meetingId}`); - user.requesterUserId = user.userId; - return userLeaving(user, user.userId, user.connectionId); + return userLeaving(user.meetingId, user.userId, user.connectionId); }); - return Logger.info('All inactive user have been removed'); + return Logger.info('All inactive users have been removed'); }, INTERVAL_TIME); Logger.warn(`SERVER STARTED.\nENV=${env},\nnodejs version=${process.version}\nCDN=${CDN_URL}\n`, APP_CONFIG); diff --git a/bigbluebutton-html5/imports/ui/components/audio/audio-controls/container.jsx b/bigbluebutton-html5/imports/ui/components/audio/audio-controls/container.jsx index caa79c1c0296931289e6f240721afa2ec4c566ee..04161e8635cfaaa187dee9d1e6651fd7f21c69c1 100755 --- a/bigbluebutton-html5/imports/ui/components/audio/audio-controls/container.jsx +++ b/bigbluebutton-html5/imports/ui/components/audio/audio-controls/container.jsx @@ -14,7 +14,7 @@ const AudioControlsContainer = props => <AudioControls {...props} />; const processToggleMuteFromOutside = (e) => { switch (e.data) { case 'c_mute': { - makeCall('toggleSelfVoice'); + makeCall('toggleVoice'); break; } case 'get_audio_joined_status': { diff --git a/bigbluebutton-html5/imports/ui/components/audio/service.js b/bigbluebutton-html5/imports/ui/components/audio/service.js index 78cd1f4fd31b6686c51302dcd2e2632e45da117f..0c4d5a6c3c893fac7b2dbc84cd1b738fb0a480be 100755 --- a/bigbluebutton-html5/imports/ui/components/audio/service.js +++ b/bigbluebutton-html5/imports/ui/components/audio/service.js @@ -50,13 +50,13 @@ const toggleMuteMicrophone = () => { logCode: 'audiomanager_unmute_audio', extraInfo: { logType: 'user_action' }, }, 'microphone unmuted by user'); - makeCall('toggleSelfVoice'); + makeCall('toggleVoice'); } else { logger.info({ logCode: 'audiomanager_mute_audio', extraInfo: { logType: 'user_action' }, }, 'microphone muted by user'); - makeCall('toggleSelfVoice'); + makeCall('toggleVoice'); } }; diff --git a/bigbluebutton-html5/imports/ui/components/authenticated-handler/component.jsx b/bigbluebutton-html5/imports/ui/components/authenticated-handler/component.jsx index 209052abd1b6053409f12ead0125bd7c08a8c339..dd9a8e82e6216fd92e3331cb6a2c7e4f32c4bf23 100644 --- a/bigbluebutton-html5/imports/ui/components/authenticated-handler/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/authenticated-handler/component.jsx @@ -68,7 +68,9 @@ class AuthenticatedHandler extends Component { } componentDidMount() { - if (Session.get('codeError')) return this.changeState(true); + if (Session.get('codeError')) { + this.setState({ authenticated: true }); + } AuthenticatedHandler.authenticatedRouteHandler((value, error) => { if (error) AuthenticatedHandler.setError(error); this.setState({ authenticated: true }); diff --git a/bigbluebutton-html5/imports/ui/components/cursor/service.js b/bigbluebutton-html5/imports/ui/components/cursor/service.js index 3a2efb7992b926fd8933f76d802343bcce4a8bc1..7c7893fb4d49e3850c11523215fcb34425998aea 100755 --- a/bigbluebutton-html5/imports/ui/components/cursor/service.js +++ b/bigbluebutton-html5/imports/ui/components/cursor/service.js @@ -26,7 +26,7 @@ export function publishCursorUpdate(payload) { const throttledEmit = throttle(cursorStreamListener.emit.bind(cursorStreamListener), 30, { trailing: true }); throttledEmit('publish', { - credentials: Auth.credentials, + userId: Auth.userID, payload, }); } diff --git a/bigbluebutton-html5/imports/ui/components/error-screen/component.jsx b/bigbluebutton-html5/imports/ui/components/error-screen/component.jsx index bfcf865a4eceb677c70f2948cabeace51ab48e2b..bf8ddcee4bf63c5febcfb0732e011dd94c97ce73 100644 --- a/bigbluebutton-html5/imports/ui/components/error-screen/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/error-screen/component.jsx @@ -10,7 +10,7 @@ import { styles } from './styles'; const intlMessages = defineMessages({ 500: { id: 'app.error.500', - defaultMessage: 'Ops, something went wrong', + defaultMessage: 'Oops, something went wrong', }, 410: { id: 'app.error.410', diff --git a/bigbluebutton-html5/imports/ui/components/poll/container.jsx b/bigbluebutton-html5/imports/ui/components/poll/container.jsx index 643b6e9d6e9d0661f5f5f9cb5ec95681551b9fbe..769be8e1902cc523d73df9e290cbbe695c4ad10a 100644 --- a/bigbluebutton-html5/imports/ui/components/poll/container.jsx +++ b/bigbluebutton-html5/imports/ui/components/poll/container.jsx @@ -10,7 +10,7 @@ import Service from './service'; const PollContainer = ({ ...props }) => <Poll {...props} />; export default withTracker(() => { - Meteor.subscribe('current-poll', Auth.meetingID); + Meteor.subscribe('current-poll'); const currentPresentation = Presentations.findOne({ current: true, diff --git a/bigbluebutton-html5/imports/ui/components/poll/live-result/component.jsx b/bigbluebutton-html5/imports/ui/components/poll/live-result/component.jsx index 15e225050763a382638b92860f05e44b7b82a941..e5a933c0d6f2b50f018f02bd06d953ebf884032a 100644 --- a/bigbluebutton-html5/imports/ui/components/poll/live-result/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/poll/live-result/component.jsx @@ -237,7 +237,6 @@ LiveResult.propTypes = { users: PropTypes.arrayOf(PropTypes.string), }), ]), - publishPoll: PropTypes.func.isRequired, stopPoll: PropTypes.func.isRequired, handleBackClick: PropTypes.func.isRequired, }; diff --git a/bigbluebutton-html5/imports/ui/components/presentation/presentation-uploader/service.js b/bigbluebutton-html5/imports/ui/components/presentation/presentation-uploader/service.js index a076055ede2b9b8c7e806a36350f44fff7e70617..d8a1b01a5a2cc6432377d485a19e4351d63bd834 100644 --- a/bigbluebutton-html5/imports/ui/components/presentation/presentation-uploader/service.js +++ b/bigbluebutton-html5/imports/ui/components/presentation/presentation-uploader/service.js @@ -113,7 +113,7 @@ const requestPresentationUploadToken = ( Tracker.autorun((c) => { computation = c; - const sub = Meteor.subscribe('presentation-upload-token', Auth.credentials, podId, filename); + const sub = Meteor.subscribe('presentation-upload-token', podId, filename); if (!sub.ready()) return; const PresentationToken = PresentationUploadToken.findOne({ diff --git a/bigbluebutton-html5/imports/ui/components/subscriptions/component.jsx b/bigbluebutton-html5/imports/ui/components/subscriptions/component.jsx index 80f4efc3037caa911f599f7b205102a99cbf1773..72a071988a7eafee8cc923657068584357617cc5 100755 --- a/bigbluebutton-html5/imports/ui/components/subscriptions/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/subscriptions/component.jsx @@ -83,7 +83,7 @@ export default withTracker(() => { const chatIds = chats.map(chat => chat.chatId); - groupChatMessageHandler = Meteor.subscribe('group-chat-msg', credentials, chatIds, subscriptionErrorHandler); + groupChatMessageHandler = Meteor.subscribe('group-chat-msg', chatIds, subscriptionErrorHandler); subscriptionsHandlers.push(groupChatMessageHandler); } @@ -91,12 +91,12 @@ export default withTracker(() => { if (User) { const userIsModerator = User.role === ROLE_MODERATOR; - Meteor.subscribe('users', credentials, userIsModerator, subscriptionErrorHandler); - Meteor.subscribe('breakouts', credentials, userIsModerator, subscriptionErrorHandler); - Meteor.subscribe('meetings', credentials, userIsModerator, subscriptionErrorHandler); + Meteor.subscribe('users', userIsModerator, subscriptionErrorHandler); + Meteor.subscribe('breakouts', userIsModerator, subscriptionErrorHandler); + Meteor.subscribe('meetings', userIsModerator, subscriptionErrorHandler); } - const annotationsHandler = Meteor.subscribe('annotations', credentials, { + const annotationsHandler = Meteor.subscribe('annotations', { onReady: () => { const activeTextShapeId = AnnotationsTextService.activeTextShapeId(); AnnotationsLocal.remove({ id: { $ne: `${activeTextShapeId}-fake` } }); diff --git a/bigbluebutton-html5/imports/ui/services/api/index.js b/bigbluebutton-html5/imports/ui/services/api/index.js index 5f7385fc7f5aec24bbcaf3e85b75e73d1a4cf3d2..59fd844e43a27473a6d3b426f3c56e41c2e74587 100755 --- a/bigbluebutton-html5/imports/ui/services/api/index.js +++ b/bigbluebutton-html5/imports/ui/services/api/index.js @@ -13,11 +13,11 @@ import logger from '/imports/startup/client/logger'; export function makeCall(name, ...args) { check(name, String); - const { credentials } = Auth; + // const { credentials } = Auth; return new Promise((resolve, reject) => { if (Meteor.status().connected) { - Meteor.call(name, credentials, ...args, (error, result) => { + Meteor.call(name, ...args, (error, result) => { if (error) { reject(error); } @@ -26,7 +26,7 @@ export function makeCall(name, ...args) { }); } else { const failureString = `Call to ${name} failed because Meteor is not connected`; - // We don't want to send a log message if the call that failed wasa log message. + // We don't want to send a log message if the call that failed was a log message. // Without this you can get into an endless loop of failed logging. if (name !== 'logClient') { logger.warn({ diff --git a/bigbluebutton-html5/imports/ui/services/auth/index.js b/bigbluebutton-html5/imports/ui/services/auth/index.js index 69b0ecad531fd1929ae09ea4a9371df0a7ac10f6..e6e80b1d66f3059a72b37e89e899076d853e9e19 100755 --- a/bigbluebutton-html5/imports/ui/services/auth/index.js +++ b/bigbluebutton-html5/imports/ui/services/auth/index.js @@ -180,13 +180,16 @@ class Auth { return Promise.resolve(); } + return new Promise((resolve) => { resolve(this._logoutURL); }); } authenticate(force) { - if (this.loggedIn && !force) return Promise.resolve(); + if (this.loggedIn && !force) { + return Promise.resolve(); + } if (!(this.meetingID && this.userID && this.token)) { return Promise.reject({ @@ -205,7 +208,6 @@ class Auth { validateAuthToken() { return new Promise((resolve, reject) => { - Meteor.connection.setUserId(`${this.meetingID}-${this.userID}`); let computation = null; const validationTimeout = setTimeout(() => { @@ -218,7 +220,8 @@ class Auth { Tracker.autorun((c) => { computation = c; - Meteor.subscribe('current-user', this.credentials); + makeCall('validateAuthToken', this.meetingID, this.userID, this.token); + Meteor.subscribe('current-user'); const selector = { meetingId: this.meetingID, userId: this.userID }; const fields = { @@ -228,7 +231,8 @@ class Auth { // Skip in case the user is not in the collection yet or is a dummy user if (!User || !('intId' in User)) { logger.info({ logCode: 'auth_service_resend_validateauthtoken' }, 're-send validateAuthToken for delayed authentication'); - makeCall('validateAuthToken'); + makeCall('validateAuthToken', this.meetingID, this.userID, this.token); + return; } @@ -250,7 +254,6 @@ class Auth { setTimeout(() => resolve(true), 100); } }); - makeCall('validateAuthToken'); }); }