bigbluebutton-Github/bigbluebutton-html5/imports/api/users/server/handlers/validateAuthToken.js

68 lines
1.7 KiB
JavaScript
Raw Normal View History

import { check } from 'meteor/check';
import Logger from '/imports/startup/server/logger';
import Users from '/imports/api/users';
2017-10-12 09:02:23 +08:00
import userJoin from '../methods/userJoin';
const clearOtherSessions = (sessionUserId, current = false) => {
const serverSessions = Meteor.server.sessions;
Object.keys(serverSessions)
.filter(i => serverSessions[i].userId === sessionUserId)
.filter(i => i !== current)
.forEach(i => serverSessions[i].close());
};
2017-10-12 09:02:23 +08:00
export default function handleValidateAuthToken({ body }, meetingId) {
const { userId, valid, waitForApproval } = body;
check(userId, String);
2017-10-12 09:02:23 +08:00
check(valid, Boolean);
check(waitForApproval, Boolean);
const selector = {
meetingId,
userId,
clientType: 'HTML5',
};
const User = Users.findOne(selector);
2017-03-11 02:33:46 +08:00
// If we dont find the user on our collection is a flash user and we can skip
if (!User) return;
2017-10-12 09:02:23 +08:00
// Publish user join message
if (valid && !waitForApproval) {
2019-02-14 03:44:21 +08:00
Logger.info('User=', User);
2017-10-12 09:02:23 +08:00
userJoin(meetingId, userId, User.authToken);
}
const modifier = {
$set: {
2017-10-12 09:02:23 +08:00
validated: valid,
approved: !waitForApproval,
2019-01-14 21:23:35 +08:00
loginTime: Date.now(),
2019-02-27 01:40:01 +08:00
inactivityCheck: false,
},
};
const cb = (err, numChanged) => {
if (err) {
return Logger.error(`Validating auth token: ${err}`);
}
if (numChanged) {
2017-10-12 09:02:23 +08:00
if (valid) {
const sessionUserId = `${meetingId}-${userId}`;
const currentConnectionId = User.connectionId ? User.connectionId : false;
clearOtherSessions(sessionUserId, currentConnectionId);
}
return Logger.info(`Validated auth token as ${valid} user=${userId} meeting=${meetingId}`);
}
2017-10-12 09:02:23 +08:00
return Logger.info('No auth to validate');
};
2017-10-12 09:02:23 +08:00
Users.update(selector, modifier, cb);
}