Fix race condition with team access rights #497

pull/1/head
yflory 5 years ago
parent d9ab8d3f62
commit f04a6056ae

@ -494,10 +494,11 @@ define([
try { try {
var module = ctx.store.modules['team']; var module = ctx.store.modules['team'];
// changeMyRights returns true if we can't change our rights // changeMyRights returns true if we can't change our rights
module.changeMyRights(teamId, content.state, content.teamData); module.changeMyRights(teamId, content.state, content.teamData, function (done) {
if (!done) { console.error("Can't update team rights"); }
cb(true);
});
} catch (e) { console.error(e); } } catch (e) { console.error(e); }
cb(true);
}; };
handlers['OWNED_PAD_REMOVED'] = function (ctx, box, data, cb) { handlers['OWNED_PAD_REMOVED'] = function (ctx, box, data, cb) {

@ -1067,14 +1067,25 @@ define([
ctx.emit('ROSTER_CHANGE_RIGHTS', teamId, team.clients); ctx.emit('ROSTER_CHANGE_RIGHTS', teamId, team.clients);
}; };
var changeMyRights = function (ctx, teamId, state, data) { var changeMyRights = function (ctx, teamId, state, data, cb) {
if (!teamId) { return true; } if (!teamId) { return void cb(false); }
var teamData = Util.find(ctx, ['store', 'proxy', 'teams', teamId]); 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]; 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) { if (state) {
teamData.hash = data.hash; teamData.hash = data.hash;
@ -1091,6 +1102,7 @@ define([
} }
updateMyRights(ctx, teamId, data.hash); updateMyRights(ctx, teamId, data.hash);
cb(true);
}; };
var changeEditRights = function (ctx, teamId, user, state, cb) { var changeEditRights = function (ctx, teamId, user, state, cb) {
if (!teamId) { return void cb({error: 'EINVAL'}); } if (!teamId) { return void cb({error: 'EINVAL'}); }
@ -1632,8 +1644,8 @@ define([
}); });
}; };
team.changeMyRights = function (id, edit, teamData) { team.changeMyRights = function (id, edit, teamData, cb) {
changeMyRights(ctx, id, edit, teamData); changeMyRights(ctx, id, edit, teamData, cb);
}; };
team.updateMyData = function (data) { team.updateMyData = function (data) {
Object.keys(ctx.teams).forEach(function (id) { Object.keys(ctx.teams).forEach(function (id) {

Loading…
Cancel
Save