|
|
@@ -779,24 +779,67 @@ module.exports = (crowi) => {
|
|
|
const { id } = req.params;
|
|
|
const isUserPageDeletionEnabled = crowi.configManager.getConfig('crowi', 'security:isUserPageDeletionEnabled');
|
|
|
|
|
|
+ let serializedUserData;
|
|
|
+ let username;
|
|
|
try {
|
|
|
const userData = await User.findById(id);
|
|
|
- const username = userData.username;
|
|
|
+ // !! DO NOT MOVE username FROM THIS POSITION !! -- 05.31.2023
|
|
|
+ // catch username before delete user because username will be change to deleted_at_*
|
|
|
+ username = userData.username;
|
|
|
await UserGroupRelation.remove({ relatedUser: userData });
|
|
|
await userData.statusDelete();
|
|
|
await ExternalAccount.remove({ user: userData });
|
|
|
- if (isUserPageDeletionEnabled) await Page.removeUserHome(username);
|
|
|
|
|
|
- const serializedUserData = serializeUserSecurely(userData);
|
|
|
+ serializedUserData = serializeUserSecurely(userData);
|
|
|
|
|
|
activityEvent.emit('update', res.locals.activity._id, { action: SupportedAction.ACTION_ADMIN_USERS_REMOVE });
|
|
|
-
|
|
|
- return res.apiv3({ userData: serializedUserData });
|
|
|
}
|
|
|
catch (err) {
|
|
|
logger.error('Error', err);
|
|
|
return res.apiv3Err(new ErrorV3(err));
|
|
|
}
|
|
|
+
|
|
|
+ if (isUserPageDeletionEnabled) {
|
|
|
+ // find userHomePage
|
|
|
+ const userHomePage = await Page.findUserHomePage(username);
|
|
|
+
|
|
|
+ // return error if no deletalbe page
|
|
|
+ if (userHomePage == null) {
|
|
|
+ logger.error('userHomePage is not found');
|
|
|
+ const msg = 'user collection deleted but user home page is not found';
|
|
|
+ return res.apiv3Err(new ErrorV3(msg));
|
|
|
+ }
|
|
|
+
|
|
|
+ // delete completely
|
|
|
+ const isCompletely = true;
|
|
|
+ // delete recursively
|
|
|
+ const isRecursively = true;
|
|
|
+
|
|
|
+ // chack delete completely able userhomepage
|
|
|
+ const pagesToDelete = [userHomePage];
|
|
|
+ const pagesCanBeDeleted = crowi.pageService.filterPagesByCanDeleteCompletely(pagesToDelete, req.user, isRecursively, isUserPageDeletionEnabled);
|
|
|
+
|
|
|
+ // return error if no deletalbe page
|
|
|
+ if (pagesCanBeDeleted.length === 0) {
|
|
|
+ logger.warn('No pages can be deleted.');
|
|
|
+ const msg = 'user collection deleted but no pages can be deleted';
|
|
|
+ return res.apiv3Err(new ErrorV3(msg));
|
|
|
+ }
|
|
|
+
|
|
|
+ // run delete
|
|
|
+ const activityParameters = {
|
|
|
+ ip: req.ip,
|
|
|
+ endpoint: req.originalUrl,
|
|
|
+ };
|
|
|
+ const options = { isCompletely, isRecursively };
|
|
|
+ crowi.pageService.deleteMultiplePages(pagesCanBeDeleted, req.user, options, activityParameters);
|
|
|
+
|
|
|
+ return res.apiv3({
|
|
|
+ userData: serializedUserData, paths: pagesCanBeDeleted.map(p => p.path), isRecursively, isCompletely,
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ return res.apiv3({ userData: serializedUserData });
|
|
|
});
|
|
|
|
|
|
/**
|