bigbluebutton-Github/bigbluebutton-html5/imports/api/meetings/server/modifiers/addMeeting.js

146 lines
3.6 KiB
JavaScript
Raw Normal View History

2017-10-12 06:17:42 +08:00
import flat from 'flat';
import { check, Match } from 'meteor/check';
import Meetings from '/imports/api/meetings';
2016-10-22 00:27:47 +08:00
import Logger from '/imports/startup/server/logger';
const getLockSettings = props => {
if (props) {
// Since we miss a name convention here, we need to translate some properties
// key name to fit the rest of the messaging system
props = Object.assign(props, {
disablePrivChat: props.disablePrivateChat,
disablePubChat: props.disablePublicChat,
setBy: 'temp',
});
delete props['disablePrivateChat'];
delete props['disablePublicChat'];
} else {
// Default lock settings props
props = {
disableCam: false,
disableMic: false,
disablePrivChat: false,
disablePubChat: false,
lockOnJoin: true,
lockOnJoinConfigurable: false,
lockedLayout: false,
setBy: 'temp',
};
}
return props;
};
2016-10-22 00:27:47 +08:00
export default function addMeeting(meeting) {
2017-10-12 06:17:42 +08:00
const meetingId = meeting.meetingProp.intId;
2016-10-22 00:27:47 +08:00
check(meetingId, String);
2017-10-12 06:17:42 +08:00
check(meeting, {
breakoutProps: {
sequence: Number,
freeJoin: Boolean,
2017-10-12 06:17:42 +08:00
breakoutRooms: Array,
parentId: String,
},
meetingProp: {
intId: String,
extId: String,
isBreakout: Boolean,
name: String,
},
usersProp: {
webcamsOnlyForModerator: Boolean,
guestPolicy: String,
maxUsers: Number,
},
durationProps: {
createdTime: Number,
duration: Number,
createdDate: String,
maxInactivityTimeoutMinutes: Number,
warnMinutesBeforeMax: Number,
meetingExpireIfNoUserJoinedInMinutes: Number,
meetingExpireWhenLastUserLeftInMinutes: Number,
userInactivityInspectTimerInMinutes: Number,
userInactivityThresholdInMinutes: Number,
userActivitySignResponseDelayInMinutes: Number,
timeRemaining: Number,
2017-10-12 06:17:42 +08:00
},
welcomeProp: {
welcomeMsg: String,
modOnlyMessage: String,
welcomeMsgTemplate: String,
},
recordProp: Match.ObjectIncluding({
2017-10-12 06:17:42 +08:00
allowStartStopRecording: Boolean,
autoStartRecording: Boolean,
2019-02-20 06:29:23 +08:00
record: Boolean,
}),
2017-10-12 06:17:42 +08:00
password: {
viewerPass: String,
moderatorPass: String,
},
voiceProp: {
voiceConf: String,
dialNumber: String,
telVoice: String,
muteOnStart: Boolean,
2017-10-12 06:17:42 +08:00
},
screenshareProps: {
red5ScreenshareIp: String,
red5ScreenshareApp: String,
screenshareConf: String,
},
metadataProp: Object,
lockSettingsProps: Match.Any,
2017-10-12 06:17:42 +08:00
});
2016-10-22 00:27:47 +08:00
2019-02-20 06:29:23 +08:00
const newMeeting = meeting;
2016-10-22 00:27:47 +08:00
const selector = {
2016-10-24 19:20:30 +08:00
meetingId,
2016-10-22 00:27:47 +08:00
};
newMeeting.lockSettingsProps = getLockSettings(meeting.lockSettingsProps);
2019-02-23 06:08:44 +08:00
newMeeting.welcomeProp.welcomeMsg = newMeeting.welcomeProp.welcomeMsg.replace(
'href="event:',
'href="',
);
2019-02-26 01:01:28 +08:00
const insertBlankTarget = (s, i) => `${s.substr(0, i)} target="_blank"${s.substr(i)}`;
const linkWithoutTarget = new RegExp('<a href="(.*?)">', 'g');
linkWithoutTarget.test(newMeeting.welcomeProp.welcomeMsg);
if (linkWithoutTarget.lastIndex > 0) {
newMeeting.welcomeProp.welcomeMsg = insertBlankTarget(
newMeeting.welcomeProp.welcomeMsg,
linkWithoutTarget.lastIndex - 1,
);
}
2019-02-20 06:29:23 +08:00
2016-10-22 00:27:47 +08:00
const modifier = {
2017-10-12 06:17:42 +08:00
$set: Object.assign(
{ meetingId },
2019-02-20 06:29:23 +08:00
flat(newMeeting, { safe: true }),
2017-10-12 06:17:42 +08:00
),
2016-10-22 00:27:47 +08:00
};
const cb = (err, numChanged) => {
if (err) {
2017-10-12 06:17:42 +08:00
Logger.error(`Adding meeting to collection: ${err}`);
return;
2016-10-22 00:27:47 +08:00
}
const { insertedId } = numChanged;
if (insertedId) {
Logger.info(`Added meeting id=${meetingId}`);
2016-10-22 00:27:47 +08:00
}
if (numChanged) {
Logger.info(`Upserted meeting id=${meetingId}`);
2016-10-22 00:27:47 +08:00
}
};
return Meetings.upsert(selector, modifier, cb);
2017-06-03 03:25:02 +08:00
}