Improve team and account deletion for pads multiple owners
This commit is contained in:
parent
72ba9ab999
commit
b5cce5f215
@ -620,19 +620,68 @@ define([
|
|||||||
// No password for profile
|
// No password for profile
|
||||||
list.push(Hash.hrefToHexChannelId('/profile/#' + store.proxy.profile.edit, null));
|
list.push(Hash.hrefToHexChannelId('/profile/#' + store.proxy.profile.edit, null));
|
||||||
}
|
}
|
||||||
|
if (store.proxy.mailboxes) {
|
||||||
|
Object.keys(store.proxy.mailboxes || {}).forEach(function (id) {
|
||||||
|
if (id === 'supportadmin') { return; }
|
||||||
|
var m = store.proxy.mailboxes[id];
|
||||||
|
list.push(m.channel);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (store.proxy.teams) {
|
||||||
|
Object.keys(store.proxy.teams || {}).forEach(function (id) {
|
||||||
|
var t = store.proxy.teams[id];
|
||||||
|
if (t.owner) {
|
||||||
|
list.push(t.channel);
|
||||||
|
list.push(t.keys.roster.channel);
|
||||||
|
list.push(t.keys.chat.channel);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
return list;
|
return list;
|
||||||
};
|
};
|
||||||
var removeOwnedPads = function (waitFor) {
|
var removeOwnedPads = function (waitFor) {
|
||||||
// Delete owned pads
|
// Delete owned pads
|
||||||
|
var edPublic = Util.find(store, ['proxy', 'edPublic']);
|
||||||
var ownedPads = getOwnedPads();
|
var ownedPads = getOwnedPads();
|
||||||
var sem = Saferphore.create(10);
|
var sem = Saferphore.create(10);
|
||||||
ownedPads.forEach(function (c) {
|
ownedPads.forEach(function (c) {
|
||||||
var w = waitFor();
|
var w = waitFor();
|
||||||
sem.take(function (give) {
|
sem.take(function (give) {
|
||||||
Store.removeOwnedChannel(null, c, give(function (obj) {
|
var otherOwners = false;
|
||||||
if (obj && obj.error) { console.error(obj.error); }
|
nThen(function (_w) {
|
||||||
|
Store.anonRpcMsg(null, {
|
||||||
|
msg: 'GET_METADATA',
|
||||||
|
data: c
|
||||||
|
}, _w(function (obj) {
|
||||||
|
if (obj && obj.error) {
|
||||||
|
give();
|
||||||
|
return void _w.abort();
|
||||||
|
}
|
||||||
|
var md = obj[0];
|
||||||
|
var isOwner = md && Array.isArray(md.owners) && md.owners.indexOf(edPublic) !== -1;
|
||||||
|
if (!isOwner) {
|
||||||
|
give();
|
||||||
|
return void _w.abort();
|
||||||
|
}
|
||||||
|
otherOwners = md.owners.some(function (ed) { return void ed !== edPublic; });
|
||||||
|
}));
|
||||||
|
}).nThen(function (_w) {
|
||||||
|
if (otherOwners) {
|
||||||
|
Store.setPadMetadata(null, {
|
||||||
|
channel: c,
|
||||||
|
command: 'RM_OWNERS',
|
||||||
|
value: [edPublic],
|
||||||
|
}, _w());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// We're the only owner: delete the pad
|
||||||
|
store.rpc.removeOwnedChannel(c, _w(function (err) {
|
||||||
|
if (err) { console.error(err); }
|
||||||
|
}));
|
||||||
|
}).nThen(function () {
|
||||||
|
give();
|
||||||
w();
|
w();
|
||||||
}));
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@ -577,16 +577,43 @@ define([
|
|||||||
}));
|
}));
|
||||||
}).nThen(function (waitFor) {
|
}).nThen(function (waitFor) {
|
||||||
team.proxy.delete = true;
|
team.proxy.delete = true;
|
||||||
// Delete the owned pads
|
// For each pad, check on the server if there are other owners.
|
||||||
|
// If yes, then remove yourself as an owner
|
||||||
|
// If no, delete the pad
|
||||||
var ownedPads = team.manager.getChannelsList('owned');
|
var ownedPads = team.manager.getChannelsList('owned');
|
||||||
var sem = Saferphore.create(10);
|
var sem = Saferphore.create(10);
|
||||||
ownedPads.forEach(function (c) {
|
ownedPads.forEach(function (c) {
|
||||||
var w = waitFor();
|
var w = waitFor();
|
||||||
sem.take(function (give) {
|
sem.take(function (give) {
|
||||||
team.rpc.removeOwnedChannel(c, give(function (err) {
|
var otherOwners = false;
|
||||||
if (err) { console.error(err); }
|
nThen(function (_w) {
|
||||||
|
ctx.Store.anonRpcMsg(null, {
|
||||||
|
msg: 'GET_METADATA',
|
||||||
|
data: c
|
||||||
|
}, _w(function (obj) {
|
||||||
|
if (obj && obj.error) { return void _w.abort(); }
|
||||||
|
var md = obj[0];
|
||||||
|
var isOwner = md && Array.isArray(md.owners) && md.owners.indexOf(edPublic) !== -1;
|
||||||
|
if (!isOwner) { return void _w.abort(); }
|
||||||
|
otherOwners = md.owners.some(function (ed) { return void ed !== edPublic; });
|
||||||
|
}));
|
||||||
|
}).nThen(function (_w) {
|
||||||
|
if (otherOwners) {
|
||||||
|
ctx.Store.setPadMetadata(null, {
|
||||||
|
channel: c,
|
||||||
|
command: 'RM_OWNERS',
|
||||||
|
value: [edPublic],
|
||||||
|
}, _w());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// We're the only owner: delete the pad
|
||||||
|
team.rpc.removeOwnedChannel(c, _w(function (err) {
|
||||||
|
if (err) { console.error(err); }
|
||||||
|
}));
|
||||||
|
}).nThen(function () {
|
||||||
|
give();
|
||||||
w();
|
w();
|
||||||
}));
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}).nThen(function (waitFor) {
|
}).nThen(function (waitFor) {
|
||||||
@ -603,12 +630,10 @@ define([
|
|||||||
}));
|
}));
|
||||||
// Delete the chat
|
// Delete the chat
|
||||||
var chatChan = Util.find(teamData, ['keys', 'chat', 'channel']);
|
var chatChan = Util.find(teamData, ['keys', 'chat', 'channel']);
|
||||||
/*
|
|
||||||
ctx.store.rpc.removeOwnedChannel(chatChan, waitFor(function (err) {
|
ctx.store.rpc.removeOwnedChannel(chatChan, waitFor(function (err) {
|
||||||
if (err) { console.error(err); }
|
if (err) { console.error(err); }
|
||||||
console.error(err);
|
console.error(err);
|
||||||
}));
|
}));
|
||||||
*/ // XXX
|
|
||||||
// Delete the team drive
|
// Delete the team drive
|
||||||
ctx.store.rpc.removeOwnedChannel(teamData.channel, waitFor(function (err) {
|
ctx.store.rpc.removeOwnedChannel(teamData.channel, waitFor(function (err) {
|
||||||
if (err) { console.error(err); }
|
if (err) { console.error(err); }
|
||||||
|
|||||||
@ -827,7 +827,7 @@ define([
|
|||||||
// Don't push duplicates
|
// Don't push duplicates
|
||||||
if (result.indexOf(data.channel) !== -1) { return; }
|
if (result.indexOf(data.channel) !== -1) { return; }
|
||||||
// Return owned pads
|
// Return owned pads
|
||||||
if (_ownedByMe(Env, data.owners) && data.owners.length === 1) {
|
if (_ownedByMe(Env, data.owners)) {
|
||||||
result.push(data.channel);
|
result.push(data.channel);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -462,7 +462,7 @@ define([
|
|||||||
console.error(obj.error);
|
console.error(obj.error);
|
||||||
return void UI.warn(Messages.error);
|
return void UI.warn(Messages.error);
|
||||||
}
|
}
|
||||||
UI.log(Messags.sent);
|
UI.log(Messages.sent);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user