feat: account content deletion, closes #8381

This commit is contained in:
Julian Lam
2020-06-08 08:43:25 -04:00
parent 4b577a527a
commit 67aca822e6
8 changed files with 81 additions and 8 deletions

View File

@@ -126,6 +126,20 @@ User.deleteUsers = async function (socket, uids) {
});
};
User.deleteUsersContent = async function (socket, uids) {
if (!Array.isArray(uids)) {
throw new Error('[[error:invalid-data]]');
}
const isMembers = await groups.isMembers(uids, 'administrators');
if (isMembers.includes(true)) {
throw new Error('[[error:cant-delete-other-admins]]');
}
await Promise.all(uids.map(async (uid) => {
await user.deleteContent(socket.uid, uid);
}));
};
User.deleteUsersAndContent = async function (socket, uids) {
deleteUsers(socket, uids, async function (uid) {
await user.delete(socket.uid, uid);

View File

@@ -17,7 +17,13 @@ const file = require('../file');
module.exports = function (User) {
const deletesInProgress = {};
User.delete = async function (callerUid, uid) {
User.delete = async (callerUid, uid) => {
await User.deleteContent(callerUid, uid);
await removeFromSortedSets(uid);
return await User.deleteAccount(uid);
};
User.deleteContent = async function (callerUid, uid) {
if (parseInt(uid, 10) <= 0) {
throw new Error('[[error:invalid-uid]]');
}
@@ -25,13 +31,10 @@ module.exports = function (User) {
throw new Error('[[error:already-deleting]]');
}
deletesInProgress[uid] = 'user.delete';
await removeFromSortedSets(uid);
await deletePosts(callerUid, uid);
await deleteTopics(callerUid, uid);
await deleteUploads(uid);
await deleteQueued(uid);
const userData = await User.deleteAccount(uid);
return userData;
};
async function deletePosts(callerUid, uid) {

View File

@@ -22,6 +22,7 @@
<li><a href="#" class="reset-lockout"><i class="fa fa-fw fa-unlock"></i> [[admin/manage/users:reset-lockout]]</a></li>
<li class="divider"></li>
<li><a href="#" class="delete-user"><i class="fa fa-fw fa-trash-o"></i> [[admin/manage/users:delete]]</a></li>
<li><a href="#" class="delete-user-content"><i class="fa fa-fw fa-trash-o"></i> [[admin/manage/users:delete-content]]</a></li>
<li><a href="#" class="delete-user-and-content"><i class="fa fa-fw fa-trash-o"></i> [[admin/manage/users:purge]]</a></li>
</ul>
</div>