From 122903cbe76a8dc70bd8dbe873381a283fd32929 Mon Sep 17 00:00:00 2001 From: Ayushya Amitabh Date: Wed, 6 Jan 2021 11:57:38 -0500 Subject: [PATCH] v1.7.9/webhook user cleanup update --- functions/package-lock.json | 2 +- functions/webhooks/userCleanUp.js | 54 ++++++++++++++++++++++--------- 2 files changed, 39 insertions(+), 17 deletions(-) diff --git a/functions/package-lock.json b/functions/package-lock.json index a794b73..20dedb0 100644 --- a/functions/package-lock.json +++ b/functions/package-lock.json @@ -1,6 +1,6 @@ { "name": "watch-party-api", - "version": "1.7.7", + "version": "1.7.9", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/functions/webhooks/userCleanUp.js b/functions/webhooks/userCleanUp.js index c730b11..1b70f4d 100644 --- a/functions/webhooks/userCleanUp.js +++ b/functions/webhooks/userCleanUp.js @@ -1,4 +1,4 @@ -const admin = require('firebase-admin'); +const admin = require("firebase-admin"); const timeDiff = (ds1, ds2) => { const d1 = new Date(ds1); @@ -13,36 +13,58 @@ const cleanUser = async (pT, sT) => { await admin .auth() .listUsers(1000, pT) - .then((listUsersResult) => { + .then(async (listUsersResult) => { listUsersResult.users.forEach((userRecord) => { - if (userRecord.uid !== "PTjxbs2rAxMvCD6Pj5P6Z2U6d5A3" && timeDiff(userRecord.metadata.lastRefreshTime, sT) >= 24) { + if ( + userRecord.uid !== "PTjxbs2rAxMvCD6Pj5P6Z2U6d5A3" && + timeDiff(userRecord.metadata.lastRefreshTime, sT) >= 24 + ) { usersToDelete.push(userRecord.uid); } }); if (listUsersResult.pageToken) { - usersToDelete.push(...listAllUsers(listUsersResult.pageToken, sT)); + const uD = await cleanUser(listUsersResult.pageToken, sT); + usersToDelete.push(...uD); } return; }) .catch((error) => { - console.log('Error listing users:', error); + console.log("Error listing users:", error); }); return usersToDelete; }; +const batchDeleteUser = async (userList, totalNumber) => { + setTimeout(async () => { + const uTDSplice = userList.splice(0, 100); + if (uTDSplice.length > 0) { + await admin + .auth() + .deleteUsers(uTDSplice) + .catch((err) => + console.error( + `[ERROR]\tWEBHOOKS/User Clean Up\t# OF USERS ${userList.length} REMAINING,\tERROR:${err}` + ) + ); + console.info( + `[DONE]\tWEBHOOKS/User Clean Up\t# OF USERS ${uTDSplice.length}/${userList.length}` + ); + batchDeleteUser(userList, totalNumber); + } else { + console.info( + `[DONE]\tWEBHOOKS/User Clean Up\tDeleted all ${totalNumber} stale users` + ); + } + }, 3000); +}; + module.exports = async (req, res) => { console.info(`[START]\tWEBHOOKS/User Clean Up`); - res.status(200).send({ message: 'User Clean Up Started' }); + res.status(200).send({ message: "User Clean Up Started" }); const startedTime = new Date(); const usersToDelete = await cleanUser(undefined, startedTime); - console.info(`[PROGRESS]\tWEBHOOKS/User Clean Up\t# OF USERS ${usersToDelete.length}`); - admin - .auth() - .deleteUsers(usersToDelete) - .catch((err) => - console.error( - `[ERROR]\tWEBHOOKS/User Clean Up\t# OF USERS ${usersToDelete.length},\tERROR:${err}` - ) - ); - console.info(`[DONE]\tWEBHOOKS/User Clean Up\t# OF USERS ${usersToDelete.length}`); + console.info( + `[PROGRESS]\tWEBHOOKS/User Clean Up\t# OF USERS ${usersToDelete.length}` + ); + batchDeleteUser(usersToDelete, usersToDelete.length); };