Fix race condition with team access rights #497
This commit is contained in:
@@ -1067,14 +1067,25 @@ define([
|
||||
ctx.emit('ROSTER_CHANGE_RIGHTS', teamId, team.clients);
|
||||
};
|
||||
|
||||
var changeMyRights = function (ctx, teamId, state, data) {
|
||||
if (!teamId) { return true; }
|
||||
var changeMyRights = function (ctx, teamId, state, data, cb) {
|
||||
if (!teamId) { return void cb(false); }
|
||||
var teamData = Util.find(ctx, ['store', 'proxy', 'teams', teamId]);
|
||||
if (!teamData) { return true; }
|
||||
if (!teamData) { return void cb(false); }
|
||||
var onReady = ctx.onReadyHandlers[teamId];
|
||||
var team = ctx.teams[teamId];
|
||||
if (!team) { return true; }
|
||||
|
||||
if (teamData.channel !== data.channel || teamData.password !== data.password) { return true; }
|
||||
if (!team && Array.isArray(onReady)) {
|
||||
onReady.push({
|
||||
cb: function () {
|
||||
changeMyRights(ctx, teamId, state, data, cb);
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (!team) { return void cb(false); }
|
||||
|
||||
if (teamData.channel !== data.channel || teamData.password !== data.password) { return void cb(false); }
|
||||
|
||||
if (state) {
|
||||
teamData.hash = data.hash;
|
||||
@@ -1091,6 +1102,7 @@ define([
|
||||
}
|
||||
|
||||
updateMyRights(ctx, teamId, data.hash);
|
||||
cb(true);
|
||||
};
|
||||
var changeEditRights = function (ctx, teamId, user, state, cb) {
|
||||
if (!teamId) { return void cb({error: 'EINVAL'}); }
|
||||
@@ -1632,8 +1644,8 @@ define([
|
||||
});
|
||||
|
||||
};
|
||||
team.changeMyRights = function (id, edit, teamData) {
|
||||
changeMyRights(ctx, id, edit, teamData);
|
||||
team.changeMyRights = function (id, edit, teamData, cb) {
|
||||
changeMyRights(ctx, id, edit, teamData, cb);
|
||||
};
|
||||
team.updateMyData = function (data) {
|
||||
Object.keys(ctx.teams).forEach(function (id) {
|
||||
|
||||
Reference in New Issue
Block a user