Просмотр исходного кода

Merge pull request #25467 from overleaf/bg-fix-error-handling-when-accounts-are-deleted

improve logging deleted when user data is expired

GitOrigin-RevId: ac85b66c503184a815348a11a730fb68a504d80a
Brian Gough 1 год назад
Родитель
Сommit
1e6112d5b0
1 измененных файлов с 44 добавлено и 16 удалено
  1. 44 16
      services/web/app/src/Features/User/UserDeleter.js

+ 44 - 16
services/web/app/src/Features/User/UserDeleter.js

@@ -87,17 +87,29 @@ async function deleteMongoUser(userId) {
 }
 
 async function expireDeletedUser(userId) {
-  await Modules.promises.hooks.fire('expireDeletedUser', userId)
-  const deletedUser = await DeletedUser.findOne({
-    'deleterData.deletedUserId': userId,
-  }).exec()
-
-  await Feedback.deleteMany({ userId }).exec()
-  await OnboardingDataCollectionManager.deleteOnboardingDataCollection(userId)
-
-  deletedUser.user = undefined
-  deletedUser.deleterData.deleterIpAddress = undefined
-  await deletedUser.save()
+  logger.info({ userId }, 'expiring deleted user')
+  try {
+    logger.info({ userId }, 'firing expireDeletedUser hook')
+    await Modules.promises.hooks.fire('expireDeletedUser', userId)
+    logger.info({ userId }, 'removing deleted user feedback records')
+    await Feedback.deleteMany({ userId }).exec()
+    logger.info({ userId }, 'removing deleted user onboarding data')
+    await OnboardingDataCollectionManager.deleteOnboardingDataCollection(userId)
+    logger.info({ userId }, 'redacting PII from the deleted user record')
+    const deletedUser = await DeletedUser.findOne({
+      'deleterData.deletedUserId': userId,
+    }).exec()
+    deletedUser.user = undefined
+    deletedUser.deleterData.deleterIpAddress = undefined
+    await deletedUser.save()
+    logger.info({ userId }, 'deleted user expiry complete')
+  } catch (error) {
+    logger.warn(
+      { error, userId },
+      'something went wrong expiring the deleted user'
+    )
+    throw error
+  }
 }
 
 async function expireDeletedUsersAfterDuration() {
@@ -112,11 +124,27 @@ async function expireDeletedUsersAfterDuration() {
   if (deletedUsers.length === 0) {
     return
   }
-
-  for (let i = 0; i < deletedUsers.length; i++) {
-    const deletedUserId = deletedUsers[i].deleterData.deletedUserId
-    await expireDeletedUser(deletedUserId)
-    await UserAuditLogEntry.deleteMany({ userId: deletedUserId }).exec()
+  logger.info(
+    { deletedUsers: deletedUsers.length, retentionPeriodInDays: DURATION },
+    'expiring batch of deleted users older than retention period'
+  )
+  try {
+    for (let i = 0; i < deletedUsers.length; i++) {
+      const deletedUserId = deletedUsers[i].deleterData.deletedUserId
+      await expireDeletedUser(deletedUserId)
+      logger.info({ deletedUserId }, 'removing deleted user audit log entries')
+      await UserAuditLogEntry.deleteMany({ userId: deletedUserId }).exec()
+    }
+    logger.info(
+      { deletedUsers: deletedUsers.length },
+      'batch of deleted users expired successfully'
+    )
+  } catch (error) {
+    logger.warn(
+      { error },
+      'something went wrong expiring batch of deleted users'
+    )
+    throw error
   }
 }